Tkinter/Pmw callback question

bernie bernie at
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
> (  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 = kw

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

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).


More information about the Python-list mailing list