2011-11-25 13 views
6

Tôi đã cố gắng lấy "tên" của tất cả GtkWidgets trong đối tượng GtkBuilder.GtkBuilder và "tên"

Tôi đã quản lý để nhận tất cả các đối tượng từ đối tượng trình xây dựng qua gtk_builder_get_objects() và lưu trữ chúng trong một Danh sách phát.

Tuy nhiên, khi tôi sử dụng gtk_widget_get_name() trên gobjects (mà tôi chuyển sang GtkWidgets), tôi nhận được tên chung chung như "GtkWindow" và "GtkButton" thay vì "window1" hoặc "button1" được hiển thị trong glade.

Bất kỳ trợ giúp sẽ được cực kỳ đánh giá cao và sẽ làm cho lập trình viên này rất hạnh phúc.

+0

Đây là câu hỏi tương tự cho Python với nội tâm GObject: http://stackoverflow.com/q/15393120/247696 – Flimm

Trả lời

3

Tên được đặt cho trình tạo không giống như tên của GtkWidget. GtkBuilder duy trì một bảng băm nội bộ có tên được đặt trong GtkBuilder UI definitions từ tệp hoặc chuỗi (từ đó người xây dựng đã được thêm) và đối tượng liên quan. Nó được sử dụng để lấy các đối tượng khi gọi gtk_builder_get_object(). Sử dụng thuộc tính "name" của GtkWidget. Đặt thuộc tính "name" trong GtkBuilder UI definitions để đặt tên của GtkWidget có thể được truy xuất bằng cách sử dụng gtk_widget_get_name().
Hy vọng điều này sẽ hữu ích!

+0

Cảm ơn bạn rất nhiều. Ý tôi là, THANK YOU. Tắt chủ đề: Trang gtkbuilder không nói hoặc nhấn mạnh vào thực tế là có hai thuộc tính "tên" riêng biệt. Bạn có biết nơi tôi có thể nhận được thông tin tốt hơn về glade và gtkbuilder không? – seininn

+1

@seininn: Bạn được hoan nghênh! Vâng ['Trang GTkBuilder'] (http://developer.gnome.org/gtk/2.24/GtkBuilder.html) không bao giờ nói rằng tên là tập hợp là thuộc tính của' GtkWidget' liên quan. Nó nói rằng tên của nó được gán cho chúng trong mô tả giao diện người dùng. Vì vậy, thuộc tính '" name "' được liên kết với 'GtkWidget' không phải là thuộc tính được đặt nhưng nó là một định danh. Tôi nghĩ rằng bạn đã nhận nó hỗn hợp lên :) ... Tôi nghĩ rằng tài liệu trực tuyến & diễn đàn là các nguồn lực tốt nhất tôi có thể nghĩ đến cho 'glade' &' GtkBuilder' –

4

Tôi đang làm chính xác điều tương tự. Tôi đã có thể nhận được các chuỗi id= từ tệp .glade bằng cách sử dụng gtk_buildable_get_name() như được chỉ định here.

Lưu ý: Trước 2.20, GtkBuilder đã đặt thuộc tính "tên" của tiện ích được tạo thành thuộc tính "id". Trong GTK + 2.20 trở lên, bạn phải sử dụng gtk_buildable_get_name() thay vì gtk_widget_get_name() để lấy "id" hoặc đặt thuộc tính "name" trong định nghĩa giao diện người dùng của mình.

+0

Lưu ý cho những người sử dụng Perl: $ widget-> get_name() cuộc gọi gtk_widget_get_name(). Để gọi gtk_buildable_get_name(), hãy sử dụng: $ name = Gtk3 :: Buildable :: get_name ($ widget) – TheAmigo

Các vấn đề liên quan