我这个连接所有信号gtk.builder: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)
我怎么能阻止/断开任何/所有的信号吗? (并重新连接?)
在此先感谢!
我这个连接所有信号gtk.builder: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)
我怎么能阻止/断开任何/所有的信号吗? (并重新连接?)
在此先感谢!
gtk.builder提供connect_signals()作为一种方便,一旦信号被连接,它就由您来编程地阻止或断开信号。
这里是既阻塞信号和断开处理程序的PyGTK文档:
http://www.pygtk.org/pygtktutorial/ch-advancedeventsandsignals.html
但这个答案只是告诉我们“如果你有handler_id,那么你可以断开信号”。 gtk.builder.connect_signals不提供它所做的handler_id。 – mariotomo 2015-08-20 13:29:11
我在这样的情况下做的,是与gtk.Builder.connect_signals
手动连接的信号,而不是因为这个方法没有返回他们的 处理程序标识符,并没有该处理程序,你不能操纵信号。
在我的情况只是一些信号,没什么大不了的。
我现在正在做的事:忘记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)
这似乎是第一个快速检查后进行排序工作。
或更好的使用lxml,代码看起来基本相同,但lxml可以从pypi安装 – mariotomo 2015-08-20 20:10:20
我正要问一个同样的问题:鉴于我想用'glade'来描述我的接口并声明信号名称,我该如何以编程方式断开我可以以编程方式连接的东西? – mariotomo 2015-08-20 13:48:17