Tkinter menu question--how to pass arguments

Kevin Walzer kw at codebykevin.com
Fri Mar 30 22:37:29 CEST 2007


kyosohma at gmail.com wrote:
> On Mar 30, 2:32 pm, Kevin Walzer <k... at codebykevin.com> wrote:
>> I'm having difficulty structuring a Tkinter menu entry. Here is the
>> command in question:
>>
>> self.finkmenu.add_command(label='Update List of Packages',
>> command=self.authorizeCommand(self.scanPackages))
>>
>> When I start my program, it crashes because it's trying to run the
>> command self.authorizeCommand. The reason I'm structuring it in this
>> fashion is that this command takes another command as an argument--in
>> this case, self.ScanPackages.
>>
>> The basic structure of the program is that the self.authorizeCommand
>> function pops up a dialog box for a password; it then feeds the password
>> to the function that it takes as an argument, i.e. self.scanPackages.
>>
>> I tried setting up the menu entry without the additional parameter, i.e.
>> command=self.authorizeCommand, but then when I try to run the command
>> from the menu, it complains there are not enough arguments.
>> Unsurprising, since self.authorizeCommand takes another function name as
>> an argument.
>>
>> How can I structure the menu item to reflect the correct number of
>> arguments without it trying to execute the command?
>>
>> --
>> Kevin Walzer
>> Code by Kevinhttp://www.codebykevin.com
> 
> There are various ways to accomplish this. The 2 most popular that I
> am aware of are using a helper function or lambda.
> 
> using a lambda:
> 
> command=(lambda:self.authorizeCommand(self.scanPackages))
> 
> 
> using a handler (i.e. indirection layer):
> 
> def func():
>    self.authorizeCommand(self.scanPackages)
> 
> self.finkmenu.add_command(label='Update List of
> Packages',command=func)
> 
> 
> Both of these are talked about in detail in "Programming Python 3rd
> Ed" by Lutz. I found that helpful for me. Of course, I decided to stop
> using Tkinter and switched to wxPython. Hope this gets you going
> though.
> 
> Mike
> 
lambda does the trick--thanks. I have the Lutz book but overlooked that 
part.

-- 
Kevin Walzer
Code by Kevin
http://www.codebykevin.com



More information about the Python-list mailing list