Python 为什么默认选中我的Checkbutton?
我有一个函数,它接收一个列表,并为列表中的每个元素创建一个Python 为什么默认选中我的Checkbutton?,python,tkinter,Python,Tkinter,我有一个函数,它接收一个列表,并为列表中的每个元素创建一个检查按钮。这是一种菜单。但是当我调用此函数时,每个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, vari
检查按钮。这是一种菜单。但是当我调用此函数时,每个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 checkbutton有3种状态:
检查
未经检查
“半检查”状态,称为“三态模式”。当您在一个层次结构中排列了多个复选按钮时,此状态非常有用-当选中一些“子”复选按钮时,“父”复选按钮应处于此第三种状态
默认情况下,这3个状态对应这3个值:
- 选中=1
- 未选中=0
- 变灰了=还有别的吗
(可以使用onvalue
和offvalue
参数更改这些值,请参阅。)
这解释了为什么checkbutton在默认情况下显示为选中状态:新的StringVar
的值是空字符串,对应于特殊的第三种状态
要将checkbutton的状态设置为“unchecked”,必须将变量设置为offvalue
(默认值为0):
或者,您可以使用默认设置为0的BooleanVar
或IntVar
:
eventToReturn = tk.IntVar()
“StringVar无法正确保存checkbutton的状态”-这是错误的陈述。使用带有复选按钮的StringVar
是完全可以接受的。当状态为开或关(或第三个三态值)时,值本身可以是任意字符串。@BryanOakley你说得对,但我找不到有关第三个状态的任何信息。checkbutton显示为灰色并已选中,但这种状态实际上意味着什么?你愿意写一个答案吗?当你有一个层次结构的复选按钮时,第三种状态最有用。如果您有一组checkbutton,其中一些选中,一些未选中,则它们的父checkbutton将具有第三个值。规范的tcl/tk文档在这里进行了描述:@BryanOakley感谢您提供的信息,我已经更正了我的答案。三态检查按钮不一定是灰色的。这取决于您运行的平台。此外,要将checkbuttons状态设置为“unchecked”,必须将其设置为offvalue,offvalue可能为零,也可能不为零。这里有一个不同平台上第三种状态的屏幕截图:请添加。
eventToReturn = tk.IntVar()