3

我用这个连接gtk.builder中的所有信号:

ui_builder = gtk.Builder()
ui_builder.add_from_file('main.ui')
self.win_main = builder.get_object('win_main')
ui_builder.connect_signals(self)

请问我怎样才能阻止/断开任何/所有信号?(然后重新连接?)

提前致谢!

4

3 回答 3

2

gtk.builder 提供 connect_signals() 是为了方便,一旦连接了信号,您就可以通过编程方式阻止或断开信号。

这是阻塞信号和断开处理程序的 PyGTK 文档:

http://www.pygtk.org/pygtktutorial/ch-advancedeventsandsignals.html

于 2010-11-19T00:37:38.040 回答
0

在这种情况下,我所做的是手动连接信号,而不是 gtk.Builder.connect_signals因为此方法不返回其处理程序 ID,并且没有该处理程序,您将无法操纵信号。

就我而言,这只是几个信号,没什么大不了的。

于 2010-11-24T20:21:02.730 回答
0

我现在在做什么:忘记gtk.builder.connect_signals

所以在你的代码之后:

ui_builder = gtk.Builder()
ui_builder.add_from_file('main.ui')
self.win_main = builder.get_object('win_main')

我会有类似的东西:

list_of_handler_ids = []
import libxml2
doc = libxml2.parseFile('main.ui')
ctxt = doc.xpathNewContext()
signals = ctxt.xpathEval('//signal')
for s in signals:
    handler = getattr(self, s.prop('handler'))
    signaller = getattr(self.win_main, s.parent.prop('id'))
    handler_id = signaller.connect(s.prop('name'), handler)
    list_of_handler_ids.append(handler_id)

在第一次快速检查之后,这似乎有点工作。

于 2015-08-20T14:16:34.230 回答