2011-11-07 13 views
13

लक्षित ऑब्जेक्ट नष्ट होने पर सिग्नल स्वचालित रूप से डिस्कनेक्ट हो जाएंगे? G_signal_connect() से सिग्नल आईडी रिकॉर्ड किए बिना, क्या मैं उस सिग्नल को हटा सकता हूं?जीटीके के सिग्नल को डिस्कनेक्ट कैसे करें?

उत्तर

13

आप संकेत हैंडलर आईडी नहीं सहेजा गया, तो आप उसे खोज सकते हैं g_signal_handler_find() का उपयोग कर और यह हमेशा की तरह डिस्कनेक्ट करें, या किसी संकेत है कि g_signal_handlers_disconnect_matched() या g_signal_handlers_disconnect_by_func() साथ कुछ शर्तों को पूरा डिस्कनेक्ट कर दें।

7

बेशक जब लक्ष्य वस्तु नष्ट हो जाती है, तो उससे जुड़े सिग्नल हटा दिए जाते हैं (अन्यथा वहां एक बड़ी मेमोरी रिसाव होगी, लेकिन g_signal_connect_object पर चेतावनी पढ़ें)। हालांकि, g_signal_handler_disconnect पर कॉल करने के लिए आपको g_signal_connect और दोस्तों द्वारा दिए गए हैंडलर आईडी की आवश्यकता है।

1

आप * हैंडलर_ब्लॉक_बी_फनक * और * हैंडलर_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

संबंधित मुद्दे