[Tutor] disabling Pmw ComboBox's EntryField? [quick lambda hacks]

Danny Yoo dyoo@hkn.eecs.berkeley.edu
Mon, 18 Feb 2002 19:18:15 -0800 (PST)


On Mon, 18 Feb 2002, Lance E Sloan wrote:

> 
> Danny Yoo wrote:
> [...]
> > implies that self.cboxDomain.invoke() doesn't need to take the 'event'
> > parameter that get's passed when we bind it to Button-1.  We can do a
> > quicky thing to allow it to ignore the event parameter:
> [...]
> > The above fix may not work perfectly yet.  If you're using a Python older
> > than 2.2, you may need to do something to simulate lexical sope, perhaps
> > something like this:
> > 
> > ###
> > self.cboxDomain.component('entryfield_entry').bind('<Button-1>',
> > lambda event,
> > self=self: self.cboxDomain.invoke())
> > ###



By the way, we don't really need lambda; I was using a shortcut.  We could
alternatively do something like this:


###
def callback(ignored_event, component=self.cboxDomain):
    component.invoke()

self.cboxDomain.component('entryfield_entry').bind('<Button-1>',
                                                   callback)
###

Python allows us to define functions anywhere; Python's lambda statement
is just a shortcut to avoid giving the function a name.



> This second method worked for me.  I'm using Python 2.1 for now.  I
> assume that will continue to work in future versions of Python for a
> while, too.  Is that correct?

Yes, I'm pretty sure that this will work for a long time; it depends on a
function's default arguments, and I'm pretty sure that won't break at
least until Python 3k or so.  *grin*



> Is there a mailing list somewhere that's dedicated to Python Tkinter
> programming?

Dunno about this, but Tutor is a pretty good place to ask Tkinter
questions.  I believe that Manning, publishers of "Python and Tkinter
Programming", hosts a forum for people who have bought the book:

  http://www.manning.com/getpage.html?project=grayson&filename=forum.html


Good luck!