Hi, Thus spoketh craf <p...@vtr.net> unto us on Fri, 17 Dec 2010 15:16:22 -0300:
(...) > I have access to the function (greeting) from the button and the window > close button. > > It works fine, but wanted to know whether the use of lambda (lambda), > can be expressed in another way more elegant and less confusing. > If I understand you correctly, your problem is that the event callback receives the event instance as argument but the wm_protocol() doesn't? You can circumvent this by defining a default value for the event parameter, as in: class App: def __init__(self, master): self.root = master self.b1 = Tkinter.Button(master) self.b1.pack() self.b1.bind('<Button-1>', self.foo) self.root.protocol('WM_DELETE_WINDOW', self.foo) def foo(self, event=None): greeting(self) In most cases it is probably even better (and less confusing) to avoid calling externally defined functions whereever possible and define prefer class methods instead, as in: class App: def __init__(self, master): self.root = master self.b1 = Tkinter.Button(master) self.b1.pack() self.b1.bind('<Button-1>', self.foo) self.root.protocol('WM_DELETE_WINDOW', self.foo) def foo(self, event=None): self.root.destroy() BTW, I am not sure if you are aware of this, root.destroy() is already defined as default callback for WM_DELETE_WINDOW in Tkinter.py, so it's kind of redundant here; although it won't make much difference in most situations, some people say the canonical way ending a Tkinter app is to end the mainloop with root.quit() instead and destroy() the window after the mainloop ended, as in: root = Tk() root.protocol('WM_DELETE_WINDOW', root.quit) (...)# a lot of code here root.mainloop() root.destroy() That's what they do in IDLE, for example. Regards Michael .-.. .. ...- . .-.. --- -. --. .- -. -.. .--. .-. --- ... .--. . .-. Without facts, the decision cannot be made logically. You must rely on your human intuition. -- Spock, "Assignment: Earth", stardate unknown _______________________________________________ Tkinter-discuss mailing list Tkinter-discuss@python.org http://mail.python.org/mailman/listinfo/tkinter-discuss