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

Reply via email to