Russell E. Owen wrote: > Having looked at it again, it is familiar. I copied it when I wrote my > own code. I avoided using at the time both because the initial > underscore suggested it was a private method and because it introduces > an extra function call. > > _register has the same weakness that my code had when I used id(func) -- > it uses the id of the function to generate the unique tk function name, > but it keeps no reference to that function. > > Either Tkinter is clever about keeping a reference to each callable > around, or else it has the same bug I was seeing and it just doesn't > show up often enough to have been caught. I should take some time and > look into that.
of course it keeps a reference to it; how else do you expect the Tcl command to find the right PyObjects? >>> import Tkinter >>> w = Tkinter.Tk() >>> def f(): ... pass ... >>> import sys >>> sys.getrefcount(f) 2 >>> w.register(f) '9571664f' >>> sys.getrefcount(f) 3 >>> del f >>> w.tk.call("9571664f") 'None' (PyObject pointers to the callable and the interpreter object are stored in a Tcl clientData record associated with the command) </F> -- http://mail.python.org/mailman/listinfo/python-list