如何多次运行 gtk.Builder.connect_signals?
这是一个跟另一个问题相关的后续问题。
我正在尝试扩展gtk.Builder,但发现一旦创建了builder实例,就只能调用一次connect_signals方法:如果调用超过一次,第二次之后的调用都会返回None
(这意味着:所有信号都已经连接,这显然不是真的!)。
问题是,在我的设计中,我需要把builder实例传递给不同的模块(每个模块都有一些处理程序来管理用户界面),但这样一来,我就做不到。
我试着看看能否理解gtk.Builder是如何/在哪里存储在Glade GUI中分配的处理程序名称,以便写一个自己的方法来解决这个限制,但经过一个多小时的控制台实验,我仍然不知道这些信息存储在哪里。
任何帮助或指引都非常感谢! :)
2 个回答
-1
我觉得如果你想多次调用 connect_signals 的话,你必须在每次调用之间先断开连接,类似于这样:
x = self.menu.connect('activate', self.func1)
self.menu.disconnect(x)
x = self.menu.connect('activate', self.func2)
1
这个 connect_signals
只工作一次是一个很久以前的、但没有文档说明的限制,出现在GtkBuilder的C代码中。特别是在Python中,没有办法直接访问它的内部结构来解决这个问题。
你可以不使用构建器,而是传递一个字典。等到每个人都添加完他们的处理函数后,再用这个字典来调用 connect_signals
。