"Harlin" <[EMAIL PROTECTED]> wrote >I have an array of Appnames. Let's say they are 'Monkeys', 'Cats', > 'Birds'. > > I would like create a button array with these: > > ---Start Code--- > # Constructing and displaying buttons > for a in Appnames: > Button(root, text=a, command=lambda:self.OpenFile(a)).pack() > > # Somewhere else I have this function defined within the class... > def OpenFile(self, AppName): > fh = open(AppName+".txt", 'r').read() > do something with fh > > ---End Code--- > > When I do this, whatever the last value a was is what the each button's > command option is.
that's how lexical scoping works: you're passing in the value "a" has when you click the button, not the value it had when you created the lambda. > Does anyone know what I can do to differentiate each > button so that it has its own separate argument for self.OpenFile? bind to the object instead of binding to the name: for a in Appnames: Button(root, text=a, command=lambda a=a: self.OpenFile(a)).pack() </F> -- http://mail.python.org/mailman/listinfo/python-list