为什么我的Checkbutton默认选中?

时间:2018-01-28 11:34:19

标签: python tkinter

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

1 个答案:

答案 0 :(得分:1)

tkinter checkbutton有3种状态:

  1. 检查
  2. 选中
  3. “半检查”状态,称为“三态模式”。当您在层次结构中排列多个检查按钮时,此状态非常有用 - 同时检查某些“子”检查按钮,“父”检查按钮应处于此第3状态。
  4. 默认情况下,3个状态对应于这3个值:

    • checked = 1
    • unchecked = 0
    • 灰色=其他任何东西

    (可以使用onvalueoffvalue参数更改这些值,请参阅the docs。)

    这解释了为什么默认情况下会检查您的检查按钮:新StringVar的值是空字符串,它对应于特殊的第3状态。

    要将checkbutton的状态设置为“unchecked”,您必须将变量设置为offvalue(默认值为0):

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

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

    eventToReturn = tk.IntVar()