我知道這是可能從使用一塊空地文件中導入特定對象:獲取所有對象從glade文件
builder.add_objects_from_file("example.glade", ("button1", "button2"))
但正如你所看到的,我要通過我想要導入的對象的列表。
有沒有辦法導入.glade文件中的所有內容?所有的對象,而不必在這裏指定他們的名字?
我知道這是可能從使用一塊空地文件中導入特定對象:獲取所有對象從glade文件
builder.add_objects_from_file("example.glade", ("button1", "button2"))
但正如你所看到的,我要通過我想要導入的對象的列表。
有沒有辦法導入.glade文件中的所有內容?所有的對象,而不必在這裏指定他們的名字?
當您使用gtk_builder_add_objects_from_file
時,您正在將特定對象合併到現有的GtkBuilder實例,然後該實例將實例化這些相同的對象。如果您需要UI定義文件中的一組特定對象,則僅使用此函數/方法很有用。
GtkBuilder
的正常使用,將完全加載它,然後檢索要處理的對象gtk_builder_get_object
。但是,如果您的目標是檢索所有對象,然後使用gtk_builder_get_objects
,這將返回GSList
。使用此函數/方法假定您已經從文件或其他可能的源加載了UI定義文件。
由於documented:
GSList *gtk_builder_get_objects (GtkBuilder *builder);
Gets all objects that have been constructed by builder . Note that this function does not increment the reference counts of the returned objects.
Returns
a newly-allocated GSList containing all the objects constructed by the GtkBuilder instance. It should be freed by g_slist_free().
我知道這種做法,但由於某種原因,它不和我一起工作。我寫道:builder = Gtk.Builder(); builder.add_from_file(「ui/myui.glade」); builder.get_objects()。但是當我嘗試使用我在glade文件中創建的對象的方法時(例如,如果我創建了一個窗口並將其命名爲window1),Python會告訴我:NameError:name'window1'未定義 – Madno
@Madno Is there一個同時獲取所有對象的理由? –
是的。我不想爲glade文件中的每個對象和事物使用諸如「window = gtk_builder_get_object(」window1「)」之類的東西,而只想在幾行中做出來。這就是爲什麼我要求導入所有對象的方法,然後我可以直接使用類似window1.set_title(「title」)的東西。 – Madno