Francesco Bochicchio wrote:

> It should be added here that in Python you have several ways get around 
> this Tkinter limitation and pass an user argument to the callback. Once
> upon a time , back in Python 1.x, I used to do something like this:
> 
> class CallIt:
>       def __init__(self, f, *args):
>               self.f = f
>               self.args = args
>       def __call__(self):
>               return apply(self.f, self.args)
> 
> and then, to do what the OP wanted to do:
>       command = CallIt(self.Display, 1)
> 
> but nowadays, you can achieve the same effect with:
>       command = functtools.partial(self.Display,1)

or, much clearer for non-guru programmers, and a lot easier to extend 
when you realize that you have to do more than just calling a single 
method, use a local callback function:

     def do_display():
         self.Display(1)

     w = Button(callback=do_display)

local functions are cheap in Python; creating a new one for each button 
is very inexpensive.

for very simple callbacks, you can use the lambda syntax as well:

     w = Button(callback=lambda: self.Display(1))

</F>

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to