Come scollegare i segnali in gtk.builder?
Domanda
mi collego tutti i segnali in gtk.builder con questo:
ui_builder = gtk.Builder()
ui_builder.add_from_file('main.ui')
self.win_main = builder.get_object('win_main')
ui_builder.connect_signals(self)
Come potrei bloccare / scollegare tutti / tutti i segnali, per favore? (E ricollegare?)
Grazie in anticipo!
Soluzione
gtk.builder fornisce connect_signals () come vantaggio, una volta che i segnali sono collegati tocca a voi per bloccare programatically scollegare o segnali.
Ecco la documentazione PyGTK per entrambi i segnali di blocco e gestori di sezionamento:
http://www.pygtk.org/pygtktutorial/ch-advancedeventsandsignals.html
Altri suggerimenti
Quello che faccio in questo caso, è quello di collegare manualmente il segnale, non con gtk.Builder.connect_signals
perché questo metodo non restituisce loro
handler ids, e senza tale gestore non è possibile manipolare il segnale.
Nel mio caso non era solo un paio di segnali grosso problema.
quello che sto facendo in questo momento:. Dimenticare gtk.builder.connect_signals
così dopo il vostro codice:
ui_builder = gtk.Builder()
ui_builder.add_from_file('main.ui')
self.win_main = builder.get_object('win_main')
vorrei avere qualcosa di simile a questo:
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)
che sembra una sorta di lavoro dopo un primo rapido controllo.