gtk.Builder,容器子类和绑定子窗口小部件
问题描述:
我想在gtk.Builder定义文件中使用自定义容器窗口小部件。至于那些实例窗口小部件,它的伟大工程:gtk.Builder,容器子类和绑定子窗口小部件
#!/usr/bin/env python
import sys
import gtk
class MyDialog(gtk.Dialog):
__gtype_name__ = "MyDialog"
if __name__ == "__main__":
builder = gtk.Builder()
builder.add_from_file("mydialog.glade")
dialog = builder.get_object("mydialog-instance")
dialog.run()
现在的问题是,说我有一个对话框内gtk.TreeView部件。我试图找出如何将该小部件绑定到MyDialog实例变量。我能想到的
一种廉价的替代是获取对话框控件像这样之后调用额外的方法:
dialog = builder.get_object("mydialog-instance")
dialog.bind_widgets(builder)
但是,这似乎相当尴尬。有没有人已经解决了这个问题,或者有关于如何去做的更好的想法?
谢谢,
答
好吧,我想我回答了我自己的问题。
完成上述操作的一种方法是重写gtk.Buildable的parser_finished(),它可以访问创建类实例本身的构建器对象。整个.xml文件加载后该方法被调用,所以所有的额外部件,我们可能希望得到的是已经存在保持和intialized:
class MyDialog(gtk.Dialog, gtk.Buildable):
__gtype_name__ = "MyDialog"
def do_parser_finished(self, builder):
self.treeview = builder.get_object("treeview1")
# Do any other associated post-initialization
有一点要注意的是,由于某种原因(在至少对我来说,在pygtk 2.12),如果我没有明确从gtk.Buildable继承,重写方法不会被调用,即使认为gtk.Dialog已经实现了可构建接口。
+1这太棒了!我现在明白你在做什么。 – 2009-01-05 02:00:07