2011-11-25 61 views
6

我一直在嘗試獲取GtkBuilder對象中所有GtkWidgets的「名稱」。GtkBuilder和「名稱」

我已經設法通過gtk_builder_get_objects()從構建器對象中獲取所有對象,並將它們存儲在GSList中。但是,當我在gobject上使用gtk_widget_get_name()時,我得到了通用名稱,如「GtkWindow」和「GtkButton」,而不是顯示在空地中的「window1」或「button1」。

任何幫助將是非常讚賞,將使這個程序員非常高興。

+0

下面是與GObject內省Python相同的問題:http://stackoverflow.com/q/15393120/247696 – Flimm

回答

3

爲生成器設置的名稱與GtkWidget的名稱不同。 GtkBuilder維護一個內部哈希表,該文件或字符串(從中添加了構建器)以及關聯的對象具有在GtkBuilder UI definitions中設置的名稱。當調用gtk_builder_get_object()時,它用於檢索對象。利用GtkWidget"name"財產。在GtkBuilder UI definitions中設置"name"屬性以設置可以使用gtk_widget_get_name()檢索的GtkWidget的名稱。
希望這有助於!

+0

非常感謝。我的意思是,謝謝。題外話題:gtkbuilder頁面沒有說或強調有兩個單獨的「名稱」屬性。你知道我可以從哪裏獲得關於glade和gtkbuilder的更好的信息嗎? – seininn

+1

@seininn:不客氣!那麼[GTKBuilder]頁面(http://developer.gnome.org/gtk/2.24/GtkBuilder.html)永遠不會說這個名字是該集合是相關'GtkWidget'的屬性。它表示在UI描述中分配給它們的名稱。因此,與'GtkWidget'關聯的屬性''name''不是被設置的屬性,而是一個標識符。我認爲你把它弄混了:) ...我認爲在線文檔和論壇是我能想到的最好的資源''glade'&'GtkBuilder' –

4

我正在做同樣的事情。我能夠使用 gtk_buildable_get_name()獲得來自.glade文件的id=字符串,如指定的here

注意:在2.20之前,GtkBuilder將構造的窗口小部件的「name」屬性設置爲「id」屬性。在GTK + 2.20或更新版本中,您必須使用gtk_buildable_get_name()而不是gtk_widget_get_name()來獲取「id」,或者在UI定義中設置「name」屬性。

+0

注意那些使用Perl的人:$ widget-> get_name()調用gtk_widget_get_name ()。要調用gtk_buildable_get_name(),請使用:$ name = Gtk3 :: Buildable :: get_name($ widget) – TheAmigo