这是另一个问题的后续问题。
我正在尝试扩展gtk。生成器,但我发现一旦实例化生成器,就只能调用connect_signals方法一次:如果调用不止一次,第二次之后的任何调用都将返回None
(这意味着:所有信号都已连接,这是一个公然的谎言!)。
问题是,在我的设计中,我需要将构建器实例传递给各个模块(每个模块都有一些用于管理GUI的处理程序),但通过这种方式,我做不到。
我试着看看我是否能理解gtk的方式/位置。Builder存储在Glade GUI中分配的处理程序名称,以便编写自己的方法来克服这一限制,但经过一个多小时的控制台实验,我仍然不知道这些信息存储在哪里。
非常感谢任何帮助或指示!:)
connect_signals
只工作一次是GtkBuilder C代码的一个古老但未记录的限制。特别是从Python中,没有办法访问其内部来弥补这一点。
你可以传递一本字典,而不是生成器。在每个人都添加了他们的处理程序之后,你就用它来调用connect_signals
。
我认为如果你想多次调用connect_signals,你必须在两者之间断开连接,有点像
x = self.menu.connect('activate', self.func1)
self.menu.disconnect(x)
x = self.menu.connect('activate', self.func2)