【问题标题】:Get All Objects From Glade File从 Glade 文件中获取所有对象
【发布时间】:2017-06-04 13:11:20
【问题描述】:

我知道可以使用以下命令从 glade 文件中导入特定对象:

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

但是正如你所看到的,我必须传递一个我想要导入的对象的列表。

有没有办法导入 .glade 文件中的所有内容?无需在此处指定名称的所有对象?

【问题讨论】:

    标签: python gtk gtk3 glade pygobject


    【解决方案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);

    获取由 builder 构造的所有对象。注意 此函数不会增加返回的引用计数 对象。

    退货

    一个新分配的 GSList 包含由 GtkBuilder 实例。它应该被 g_slist_free() 释放。

    【讨论】:

    • 我知道这种方法,但由于某种原因它不适用于我。我写道:builder = Gtk.Builder();builder.add_from_file("ui/myui.glade");builder.get_objects()。但是当我尝试对我在 glade 文件中创建的对象使用方法时(例如,如果我创建了一个窗口,并将其命名为 window1),Python 会告诉我:NameError: name 'window1' is not defined
    • @Madno 是否有理由同时获取所有对象?
    • 是的。我不想对我在林间空地文件中的每个对象和事物使用类似“window = gtk_builder_get_object("window1")" 的东西,而是想用几行来完成它。这就是为什么我要询问一种导入所有对象的方法,然后,我可以直接使用 window1.set_title("title") 之类的东西。
    • @Madno 嗯,它不能那样工作。当您通过 glade 创建 UI 时,会有很多您不需要以编程方式使用的小部件,因此获取指向它们的指针是完全多余且不相关的。一旦你的 GtkBuilder 填充了来自文件的数据,它将实例化所有的小部件(它就像一个“自动”工厂模式)。然后,您需要在需要时检索要使用的小部件。为此,您使用常规方法, button = builder.get_object ("button1") 然后 button.set_label(....
    • @Madno 如果您使用 get_objects 方法,那么您将拥有一个对象/小部件的链接列表,您必须对其进行迭代以获得您想要的确切对象,即使这样您也需要一个指向小部件的“指针” /object 如果你想重用它。所以,照常做......将构建器保留为python类的属性,您将能够在同一个python类/对象范围内何时何地检索小部件/对象。你明白了还是我让你更困惑了?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多