为什么我的复选框默认处于选中状态



我有一个函数,它接收一个列表并为此列表中的每个元素创建一个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 种状态:

  1. 检查
  2. 猖獗
  3. "半检查"状态,称为"三状态模式"。当您在层次结构中排列多个复选框时,此状态很有用 - 虽然选中了一些"子"复选框,但"父"复选框应处于第 3 个状态。

默认情况下,这 3 个状态对应于以下 3 个值:

  • 已选中 = 1
  • 未选中 = 0
  • 灰显 = 其他任何内容

(可以使用onvalueoffvalue参数更改这些值,请参阅文档。


这就解释了为什么您的复选框默认显示为选中状态:新StringVar的值是空字符串,对应于特殊的第 3 个状态。

要将复选框的状态设置为"未选中",您必须将变量设置为offvalue(默认为 0(:

eventToReturn = tk.StringVar(root)
eventToReturn.set('0')

或者,您可以使用 BooleanVarIntVar ,默认情况下设置为 0:

eventToReturn = tk.IntVar()

最新更新