On Mar 30, 2:32 pm, Kevin Walzer <[EMAIL PROTECTED]> 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 -- http://mail.python.org/mailman/listinfo/python-list