我有一个可变长度列表,想要为列表中的每个条目创建一个复选框(使用python TKinter)(每个条目对应一个应该使用复选框打开或关闭的机器 - >更改值在字典中)。
print enable
{'ID1050': 0, 'ID1106': 0, 'ID1104': 0, 'ID1102': 0}
(例如,可以是任何长度)
现在相关代码:
for machine in enable:
l = Checkbutton(self.root, text=machine, variable=enable[machine])
l.pack()
self.root.mainloop()
此代码生成4个复选框,但它们全部勾选或未勾选,enable
dict中的值不会更改。怎么解决? (我认为l
不起作用,但如何使这个变量?)
答案 0 :(得分:14)
传递给每个checkbutton的“变量”必须是Tkinter变量的实例 - 实际上,它只是传递的值“0”,这会导致错误行为。
您可以创建Tkinter.Variable实例,同时为您创建检查按钮的循环 - 只需将代码更改为:
for machine in enable:
enable[machine] = Variable()
l = Checkbutton(self.root, text=machine, variable=enable[machine])
l.pack()
self.root.mainloop()
然后,您可以使用其get
方法检查每个复选框的状态,如下所示
enable["ID1050"].get()
答案 1 :(得分:1)
只是想我分享我的例子而不是字典:
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()
希望有所帮助