2017-06-04 102 views
1

我知道这是可能从使用一块空地文件中导入特定对象:获取所有对象从glade文件

builder.add_objects_from_file("example.glade", ("button1", "button2")) 

但正如你所看到的,我要通过我想要导入的对象的列表。

有没有办法导入.glade文件中的所有内容?所有的对象,而不必在这里指定他们的名字?

回答

1

当您使用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().

+0

我知道这种做法,但由于某种原因,它不和我一起工作。我写道:builder = Gtk.Builder(); builder.add_from_file(“ui/myui.glade”); builder.get_objects()。但是当我尝试使用我在glade文件中创建的对象的方法时(例如,如果我创建了一个窗口并将其命名为window1),Python会告诉我:NameError:name'window1'未定义 – Madno

+0

@Madno Is there一个同时获取所有对象的理由? –

+0

是的。我不想为glade文件中的每个对象和事物使用诸如“window = gtk_builder_get_object(”window1“)”之类的东西,而只想在几行中做出来。这就是为什么我要求导入所有对象的方法,然后我可以直接使用类似window1.set_title(“title”)的东西。 – Madno