我這個連接所有信號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