如何断开gtk.builder中的信号?

时间:2010-11-18 21:17:10

标签: python pygtk glade

我用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)

我怎么能阻止/断开任何/所有信号呢? (并重新连接?)

提前致谢!

3 个答案:

答案 0 :(得分:2)

gtk.builder提供connect_signals()作为一种方便,一旦信号连接起来,它就由你来编程阻塞或断开信号。

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

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

答案 1 :(得分:0)

在这种情况下我做的是手动连接信号,而不是gtk.Builder.connect_signals,因为此方法不会返回 处理程序ID,没有那个处理程序,你就无法操纵信号。

在我的情况下,只有几个信号没什么大不了的。

答案 2 :(得分: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)

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