如何在 python tkinter 的 for 循环中从列表中创建多个复选框

新手上路,请多包涵

我有一个可变长度的列表,想为列表中的每个条目创建一个复选框(使用 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 不工作,但如何使这个变量?)

原文由 Sebastian 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

传递给每个复选按钮的“变量”必须是 Tkinter 变量的一个实例——事实上,传递的只是值“0”,这会导致错误行为。

您可以在创建检查按钮的相同 for 循环上创建 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()

原文由 jsbueno 发布,翻译遵循 CC BY-SA 3.0 许可协议

只是想我会分享我的列表而不是字典的例子:

 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()

希望能帮助到你

原文由 kidchrono 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题