如何使用GtkBuilder重用glade文件中的小部件树?

4 投票
1 回答
1121 浏览
提问于 2025-04-16 08:04

我想要动态地填充一个gtk.notebook。每次用户打开一个文件时,就会生成一个新的笔记本标签,这个过程很简单。不过,我遇到的问题是,我使用glade来构建用户界面,而这个笔记本标签应该有一个子控件树(也就是滚动窗口->视口->对齐->框架)。在我的glade文件中,我有一个模板笔记本标签,我想多次使用它,这样我就不需要用纯gtk代码来编写整个控件树。使用libglade时,你可以像在pygtk常见问题解答中解释的那样重用一个控件树:http://faq.pygtk.org/index.py?file=faq22.011.htp&req=show。那么,我该如何使用GtkBuilder来做到这一点呢?

提前谢谢你,

Arthur

1 个回答

1

用GtkBuilder这样做:

builder = gtk.Builder()
builder.add_from_file("GUI.xml")
builder.connect_signals(self)
self.window1 = builder.get_object("window1")
self.window1.show()

补充:

我之前说错了,似乎gtkbuilder在添加的时候确实会实例化对象。所以最好的方法是通过字符串手动添加这个小部件。

builder.add_from_string("""
<interface>
  <object class="GtkWindow" id="window1">
    <child>
      <object class="GtkComboBox" id="combobox1">
        <property name="model">liststore1</property>
      </object>
    </child>
  </object>
</interface>""")

self.window1 = builder.get_object("window1")

希望这样能成功!

撰写回答