With lambda, you need to set the value of the variable at the time the lambda is created, or else the variable is grabbed from the environment at the time the lambda runs. You can do this by using the variable as a default argument. In your case, change:
XT.append(Button(T,text="Viola:New Tab",command=lambda:switch_tabs(whoopsie)) to XT.append(Button(T,text="Viola:New Tab",command=lambda x=Whoopsie:switch_tabs(x)) ought to do it. Dave David J. Giesen | Research Scientist | FPEG US Display OLED Materials R+D | Eastman Kodak Company | 2/83/KRL MC02216 | Rochester, NY 14650 | david.gie...@kodak.com | 1-585-588-0480 Office | www.kodak.com > From: vtcodger <donaldken...@gmail.com> > > I came across a problem that probably has a simple, clever, answer -- but it > is eluding me. I was trying to create a set of tab buttons on a Tkinter > page using Buttons. These are created dynamically when the user loads a > file. I don't know in advance how many files will get opened, so I want to > have a variable number of tabs. > > So we have a Frame T; and an array of tabs XT[]; and a function > switch_tabs(n) that will handle the details of switching the data base, > titles, etc. I compute the tab number: > > Whoopsie = len(XT) > > And I create a new Button: > > XT.append(Button(T,text="Viola:New Tab",command=lambda: > switch_tabs(whoopsie)) > > It all works fine except for this one minor detail. Whoopsie can't be a > constant because I don't know in advance what constant to use. And if > whoopsie is a variable, it apparently is evaluated at execution time, and > will have the then current value of whoopsie, not the value I wanted to set > at creation time. I tried everything I could think of including > copy.copy(whoopsie) to get a constant set so that switch_tabs could know > which tab to switch to. > > Couldn't do it. I was starting to look at tracing back through stack frames > when it came to me that RadioButtons unlike generic Buttons have a > variable-value attribute pair that behaves as I desire. So this > manifestation of the problem is worked around. But I expect that I'll see > this problem again in some other guise. > > Am I missing something? Probably something simple? What? > -- _______________________________________________ Tkinter-discuss mailing list Tkinter-discuss@python.org http://mail.python.org/mailman/listinfo/tkinter-discuss