Hi,
Thus spoketh craf <[email protected]>
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
[email protected]
http://mail.python.org/mailman/listinfo/tkinter-discuss