Сигналы будут автоматически отключены, когда целевой объект будет уничтожен? Не записывая идентификатор сигнала из g_signal_connect(), я могу удалить этот сигнал?
Как отключить сигнал Gtk?
Ответ 1
Если вы не сохранили идентификатор обработчика сигнала, его можно найти с помощью g_signal_handler_find()
и отключить его обычным способом или отключить любые сигналы, соответствующие определенным критериям, с помощью g_signal_handlers_disconnect_matched()
или g_signal_handlers_disconnect_by_func()
.
Ответ 2
Конечно, когда целевой объект уничтожается, сигналы, связанные с ним, удаляются (в противном случае произошла бы большая утечка памяти, но прочитайте предупреждение о g_signal_connect_object). Однако для вызова g_signal_handler_disconnect вам нужен идентификатор обработчика, заданный g_signal_connect
и друзьями.
Ответ 3
Вы можете использовать методы * handler_block_by_func * и * handler_unblock_by_func *.
Пример (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)
Источник: http://www.pygtk.org/docs/pygobject/class-gobject.html