如何断开Gtk的信号?

时间:2011-11-07 13:50:18

标签: gtk signals

目标对象被销毁时,信号会自动断开吗?如果不记录g_signal_connect()的信号ID,我可以删除该信号吗?

3 个答案:

答案 0 :(得分:13)

如果您未保存信号处理程序ID,则可以使用g_signal_handler_find()进行搜索,并按常规方式断开连接,或断开与g_signal_handlers_disconnect_matched()或{{3}符合某些条件的任何信号}}

答案 1 :(得分:8)

当然,当目标对象被破坏时,连接到它的信号被移除(否则会出现大量内存泄漏,但请阅读g_signal_connect_object上的警告)。但是,要调用g_signal_handler_disconnect,您需要g_signal_connect和朋友提供的处理程序ID。

答案 2 :(得分:1)

您可以使用* 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