如何多次运行gtk.Builder.connect_signals?

时间:2011-06-27 11:16:12

标签: python user-interface gtk pygtk glade

这是一个后续问题to this other one

我正在尝试扩展gtk.Builder但我发现一旦构建器被实例化,只能调用connect_signals方法一次:如果多次调用,任何调用之后第二个将返回None(这意味着:所有信号都已连接,这是一个公然的谎言!)。

问题在于,在我的设计中,我需要将构建器实例传递给各个模块(每个模块都有一些用于管理GUI的处理程序),但这样,我不能。

我试着看看我是否能够理解gtk.Builder如何/存储分配了Glade GUI的处理程序名称,以便编写我自己的方法来克服这个限制,但是更多超过一小时的控制台实验,我仍然不明白这些信息的存储位置。

非常感谢任何帮助或指针! :)

2 个答案:

答案 0 :(得分:1)

connect_signals仅适用一次是old但未记录的GtkBuilder C代码限制。特别是从Python中,没有办法访问它的内部来弥补这一点。

您可以传递字典而不是构建器。在每个人都添加了处理程序后,您可以使用它来调用connect_signals

答案 1 :(得分:-1)

我认为如果你想多次调用connect_signals,你必须在中间断开连接,有点像

x = self.menu.connect('activate', self.func1)
self.menu.disconnect(x)
x = self.menu.connect('activate', self.func2)