Newbie question, problem with functions

Peter Otten __peter__ at web.de
Tue Sep 23 23:35:01 CEST 2003


Rickard Karlsson wrote:

> I have wrote this little program, that is supposed to execute eg. the
> Linux ls command  when you press a button. Te problem is that all the
> commands are run automaticly and they won't run when I press the
> associated button. Wath am I do wrong?

[...]
> b1 = Button(frame, text = "ls", command = self.execute('ls'))
> b2 = Button(frame, text = "ls -alh", command = self.execute('ls
> -alh'))
> b3 = Button(frame, text = "pwd", command = self.execute('pwd'))
[...]

You are in fact passing the result of self.execute(...), i. e. None, instead
of the method. Do

b3 = Button(frame, text="pwd", command=lambda: self.execute('pwd'))

instead or define wrapper methods like so:

def executeLs(self):
    self.execute("ls")

and assign them to the buttons without a trailing (), e. g.:

b1 = Button(frame, text="ls", command=self.executeLs)

Peter




More information about the Python-list mailing list