[Tkinter-discuss] How to set a constant in lambda
vtcodger
donaldkenney at gmail.com
Tue Jan 27 17:51:16 CET 2009
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?
--
View this message in context: http://www.nabble.com/How-to-set-a-constant-in-lambda-tp21689312p21689312.html
Sent from the Python - tkinter-discuss mailing list archive at Nabble.com.
More information about the Tkinter-discuss
mailing list