Home     |     .Net Programming    |     cSharp Home    |     Sql Server Home    |     Javascript / Client Side Development     |     Ajax Programming

Ruby on Rails Development     |     Perl Programming     |     C Programming Language     |     C++ Programming     |     IT Jobs

Python Programming Language     |     Laptop Suggestions?    |     TCL Scripting     |     Fortran Programming     |     Scheme Programming Language

Cervo Technologies
The Right Source to Outsource

MS Dynamics CRM 3.0

Python Programming Language

Tkinter checkbuttons and variables

from Tkinter import *

states = []

def onpress(i):
     states[i] = not states[i]

root = Tk()
for i in range(10):
     chk = Checkbutton(root, text= str(i), command=lambda i=i:
print states

after exiting i get everything like it suppose to but when i put command
like this:
command=lambda: onpress(i)
i got only last checkbutton check.

Why i have to pass this default argument?

btw i have python 2.5

Gigs_ schrieb:

Because python creates a closure around the lambda that allows
expressions inside the lambda to access surrounding variables. However,
these variables are looked up at _runtime_, when the command is actually
executed. Naturally, the value of i then is 9, because that's what it
has been assigned in the last loop iteration.


I'm basically not answering your question here, but the usual way to get a  
checkbuttons's state is as follows:

states = []
root = Tk()
for i in range(10):
   stateVar = BooleanVar()
   chk = Checkbutton(root, text=str(i), variable=stateVar)
print [v.get() for v in states]

If you want to get the value of one of your states, use the get() method  
on BooleanVar. If you want to change such a state, use the set(value)  

python -c "print ''.join([chr(154 - ord(c)) for c in  

Add to del.icio.us | Digg this | Stumble it | Powered by Megasolutions Inc