gpt4 book ai didi

python - gtk.Builder,容器子类和绑定(bind)子部件

转载 作者:太空狗 更新时间:2023-10-30 02:50:43 26 4
gpt4 key购买 nike

我正在尝试在 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 小部件。我试图弄清楚如何将该小部件绑定(bind)到 MyDialog 实例变量。

我能想到的一种廉价替代方法是在获取对话框小部件后调用其他方法,如下所示:

dialog = builder.get_object("mydialog-instance")
dialog.bind_widgets(builder)

但这看起来相当尴尬。有没有人已经解决了这个问题或者对如何去做有更好的想法?

谢谢,

最佳答案

好吧,我想我已经回答了我自己的问题。

完成上述操作的一种方法是覆盖 gtk.Buildable 的 parser_finished(),它可以访问创建类实例本身的构建器对象。该方法在整个 .xml 文件加载后调用,因此我们可能想要获取的所有其他小部件都已经存在并已初始化:

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 已经实现可构建的接口(interface)。

关于python - gtk.Builder,容器子类和绑定(bind)子部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/411708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com