Tkinter Menus
Eric Brunel
eric.brunel at pragmadev.com
Mon Dec 16 04:21:46 EST 2002
More information about the Python-list mailing list
Mon Dec 16 04:21:46 EST 2002
- Previous message (by thread): Tkinter Menus
- Next message (by thread): Tkinter Menus
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Tim Daneliuk wrote: > Justin Shaw wrote: > <SNIP> >> >> >> This version invokes callback when the menu is created: >> m.add_command(label='Call %s' % (label=" ...", callback(i+1)) >> >> and so is essentially the same as >> m.add_command(label='Call %s' % (label=" ...", None) >> >> as apposed to the other version which creates a lambda function at menu >> creation time that gets called when the menu is clicked. > > > Yes, that's what I suspected. But, what I'm trying to understand is > the language semantics here: *why* do the two forms behave the way > they do -i.e., What is it about the lambda form that defers > execution until the time when a menu item is selected? Because the purpose of lambda's is exactly that: create on the fly small functions that can be used as callbacks for Tkinter's menus, buttons, or wherever else you need to pass a function. When you write: lambda x: <expr using x> it's exactly the same than writing def f(x): return <expr using x> and use f. Using a simpler example than the one we started with, the following two codes do the same thing: ---Code 1--------------------- def myPrint(x): print '>>>', x ... def myCallback(): myPrint(76 + 23) b = Button(..., command=myCallback) b.pack() ... ------------------------------ ---Code 2--------------------- def myPrint(x): print '>>>', x ... b = Button(..., command=lambda: myPrint(76 + 23)) b.pack() ... ------------------------------ So the evalution of myPrint(76 + 23) is deferred is the second code for exactly the same reason than in the first one: because it's included in a function. In the first code, the function is explicit and named myCallback; in the second one, the function is implicitely created by the lambda. HTH -- - Eric Brunel <eric.brunel at pragmadev.com> - PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com
- Previous message (by thread): Tkinter Menus
- Next message (by thread): Tkinter Menus
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list