问题
I have a list of variable length and want to create a checkbox (with python TKinter) for each entry in the list (each entry corresponds to a machine which should be turned on or off with the checkbox -> change the value in the dictionary).
print enable
{'ID1050': 0, 'ID1106': 0, 'ID1104': 0, 'ID1102': 0}
(example, can be any length)
now the relevant code:
for machine in enable:
l = Checkbutton(self.root, text=machine, variable=enable[machine])
l.pack()
self.root.mainloop()
This code produces 4 checkboxes but they are all either ticked or unticked together and the values in the enable
dict don't change. How to solve? (I think the l
doesn't work, but how to make this one variable?)
回答1:
The "variable" passed to each checkbutton must be an instance of Tkinter Variable - as it is, it is just the value "0" that is passed, and this causes the missbehavior.
You can create the Tkinter.Variable instances on he same for loop you create the checkbuttons - just change your code to:
for machine in enable:
enable[machine] = Variable()
l = Checkbutton(self.root, text=machine, variable=enable[machine])
l.pack()
self.root.mainloop()
You can then check the state of each checkbox using its get
method as in
enable["ID1050"].get()
回答2:
Just thought I'd share my example for a list instead of a dictionary:
from Tkinter import *
root = Tk()
users = [['Anne', 'password1', ['friend1', 'friend2', 'friend3']], ['Bea', 'password2', ['friend1', 'friend2', 'friend3']], ['Chris', 'password1', ['friend1', 'friend2', 'friend3']]]
for x in range(len(users)):
l = Checkbutton(root, text=users[x][0], variable=users[x])
print "l = Checkbutton(root, text=" + str(users[x][0]) + ", variable=" + str(users[x])
l.pack(anchor = 'w')
root.mainloop()
Hope it helps
来源:https://stackoverflow.com/questions/8536518/how-do-i-create-multiple-checkboxes-from-a-list-in-a-for-loop-in-python-tkinter