Hi Thomas, It would help to give some context as to what you are trying to accomplish with having a class. In the example the TestSignals class is superfluous "t = TestSignals()" could be replaced with the contents of __init__ and the callback could be moved out as a standalone function. But I gather what you are actually trying to do is more complex than this?
The specific issue you are seeing is because the callback connected to the signal is a bound method: "self.button_clicked_cb". A bound method will keep a reference to the instance of its class TestSignals and the function. This can be observed as follows: test = TestSignals() test.button_clicked_cb.__self__ == test # True If button_clicked_cb does not access any state on the TestSignals instance, than by all means it should be moved outside of the class or made into a staticmethod or classmethod. -Simon On Sat, Sep 29, 2012 at 3:32 AM, Thomas Bechtold <[email protected]> wrote: > > Hi, > > I created a python (new style) class which contains a Gtk.Button and a > callback function which is connected to the "clicked" signal: > > class TestSignals(object): > def __del__(self): > print "Deleted object" > > def __init__(self): > self.button = Gtk.Button("My Button") > self.button.connect("clicked", self.button_clicked_cb) > > def button_clicked_cb(self, button, user_data): > print "button clicked" > > > > When I create instances of this class in a loop, the objects are never > destroyed (I never see "Deleted object" on the terminal and the memory > consumption increase): > > if __name__ == "__main__": > gc.collect() > > for i in range(0, 500): > t = TestSignals() > gc.collect() > > print "instance generation finished (count: %s)" % (i) > gc.collect() > raw_input("press enter to exit ...") > > > I can move the button_clicked_cb() function outside of the class (and > remove the "self" parameter) and then the instances will be destroyed. > > Is this the correct way to handle this? Or is there something wrong with > pyi? Imho the callback should be inside of the class. > > > Cheers, > > > Tom > > _______________________________________________ > python-hackers-list mailing list > [email protected] > https://mail.gnome.org/mailman/listinfo/python-hackers-list _______________________________________________ python-hackers-list mailing list [email protected] https://mail.gnome.org/mailman/listinfo/python-hackers-list
