2011-11-07 14 views
13

I segnali si disconnettono automaticamente quando l'oggetto target viene distrutto? Senza registrare l'ID del segnale da g_signal_connect(), posso rimuovere quel segnale?Come disconnettere un segnale di Gtk?

risposta

7

Ovviamente quando l'oggetto di destinazione viene distrutto, i segnali ad esso collegati vengono rimossi (altrimenti ci sarebbe una perdita di memoria enorme, ma leggere l'avviso su g_signal_connect_object). Tuttavia, per chiamare g_signal_handler_disconnect è necessario l'ID del gestore fornito da g_signal_connect e gli amici.

1

È possibile utilizzare i metodi * handler_block_by_func * e * handler_unblock_by_func *.

Esempio (PyGTK):

def on_treeview_fixedexpenses_cursor_changed(self, widget): 
    self.checkbutton_fixedexpensetax.handler_block_by_func(self.on_checkbutton_fixedexpensetax_toggled) 
    self.updateCurrentFixedExpense() 
    self.checkbutton_fixedexpensetax.handler_unblock_by_func(self.on_checkbutton_fixedexpensetax_toggled) 

Fonte: http://www.pygtk.org/docs/pygobject/class-gobject.html

Problemi correlati