Как отключить сигнал Gtk? - PullRequest
       8

Как отключить сигнал Gtk?

14 голосов
/ 07 ноября 2011

Будут ли сигналы автоматически отключаться при уничтожении целевого объекта?Можно ли удалить этот сигнал без записи идентификатора сигнала из g_signal_connect()?

Ответы [ 3 ]

13 голосов
/ 07 ноября 2011

Если вы не сохранили идентификатор обработчика сигнала, вы можете найти его с помощью g_signal_handler_find() и отключить его обычным способом или отключить любые сигналы, которые соответствуют определенным критериям, с помощью g_signal_handlers_disconnect_matched() или g_signal_handlers_disconnect_by_func().

8 голосов
/ 07 ноября 2011

Конечно, когда целевой объект уничтожается, связанные с ним сигналы удаляются (в противном случае произошла бы значительная утечка памяти, но прочитайте предупреждение на g_signal_connect_object ). Однако для вызова g_signal_handler_disconnect вам необходим идентификатор обработчика, данный g_signal_connect и друзьями.

1 голос
/ 14 января 2014

Вы можете использовать методы * 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

...