Tkinter/Pmw callback question

bernie bernie at pacific.net.hk
Wed Feb 28 12:45:47 EST 2001


David Lees wrote:

> I am trying to learn Tkinter and Pmw and am modifying demo Pmw code
> (EntryField.py).  I want to call a Python function that I have defined
> when I push a button and am having problems with the callback.  As long
> as the function has no arguments all is well, but I am unable to do a
> callback on a function that has arguments.  For example this works:
>
>     RunButton = Tkinter.Button(root, text = 'Run',command=foo)
>
> where foo has no arguments, but when I write:
>
>     RunButton = Tkinter.Button(root, text = 'Run',command=barf('junk'))
>
> things do not work correctly.  The 'barf' function seems to execute when
> the program starts up, but not when I click the Run button.
>
> What goes on here and what is the correct way to do call backs?
>
>

Maybe you can try this, as an alternative to lamba:

First define a Command class:
class Command:
    def __init__( self, func, *args, **kw):
        self.func = func
        self.args = args
        self.kw = kw

    def __call__( self, *args, **kw):
        args = self.args + args
        kw.update( self.kw)
        apply( self.func, args, kw)

Then:
RunButton = Tkinter.Button(root, text = 'Run',
        command=Command(barf, 'junk'))

This method will be handy when barf is long (e.g. it contains if ... else).

Bernie




More information about the Python-list mailing list