[Tkinter-discuss] Re: passing parameters to a lambda function inTkinter menubar

Cameron Laird Cameron at Phaseit.net
Sat Sep 25 18:36:52 CEST 2004

On Sat, Sep 25, 2004 at 10:17:58AM -0600, stewart at midtoad.homelinux.org wrote:
> > the lambda isn't part of the class, it's a function object.  to be able to
> > find the right self, bind it just like you bind the size value.
> doh!  That seems so obvious when you explain it.  Naturally, though, that
> concept doesn't appear in any documentation I've read about lambda functions.
> > according to the "functions are cheap, lambdas are hard to read" rule,
> > this is better written as:
> > 
> >             def setfontsize(self=self, size=size):
> >                 self.setFont(size)
> >             menuBar.addmenuitem('Size', 'command', 'Set size to ' + size,
> >                      command = setfontsize, font=self.font, label = size)
> This is great! It allows the code to be read more easily, while still allowing
> me to pass arguments through the callback.  This great little tip should be on
> the tkinter wiki site (note to self).
I think you're thinking of this in terms of syntactic scope.  While
that's a healthy instinct, the approach I find most successful in
explaining Tkinter's event orientation is to teach developers to 
categorize variables in terms of "define-time" (or "bind-time") vs.
"run-time" ("execute-time" or "use-time" or ...).  IT CAN EASILY 
HAPPEN THAT ONE BINDING INCLUDES BOTH.  I'm too weary now to write
this up for the Wiki.  I invite you to do so, though.

More information about the Tkinter-discuss mailing list