我有一个函数,它接收一个列表并为此列表中的每个元素创建一个Checkbutton
。这是一种菜单。但是当我调用这个函数时,每个Checkbutton
都已经检查过了,如何修复呢?
def ask_event(args):
root = tk.Tk()
eventToReturn = tk.StringVar(root)
for i,arg in enumerate(args):
tk.Checkbutton(root, text = arg, onvalue = arg, variable = eventToReturn).grid(row = i, column = 1)
tk.Button(root, text = "Confirm", command = root.quit).grid()
root.mainloop()
root.destroy()
value = eventToReturn.get()
return value
tkinter 复选框有 3 种状态:
- 检查
- 猖獗
- "半检查"状态,称为"三状态模式"。当您在层次结构中排列多个复选框时,此状态很有用 - 虽然选中了一些"子"复选框,但"父"复选框应处于第 3 个状态。
默认情况下,这 3 个状态对应于以下 3 个值:
- 已选中 = 1
- 未选中 = 0
- 灰显 = 其他任何内容
(可以使用onvalue
和offvalue
参数更改这些值,请参阅文档。
这就解释了为什么您的复选框默认显示为选中状态:新StringVar
的值是空字符串,对应于特殊的第 3 个状态。
要将复选框的状态设置为"未选中",您必须将变量设置为offvalue
(默认为 0(:
eventToReturn = tk.StringVar(root)
eventToReturn.set('0')
或者,您可以使用 BooleanVar
或 IntVar
,默认情况下设置为 0:
eventToReturn = tk.IntVar()