我创建了一个带有多个复选按钮的GUI(复选按钮的数量是随机的,这取决于用户之前放入参数的文件)。
因此,我想知道是否可以将用户限制为一次选中的一个检查按钮。
我知道我可以创建单选按钮,但事实是我为单选按钮具有相同的变量和相同的值,当我使用单选按钮时,我可以选中两个按钮,也不能取消选中它们。这是我的代码:
for element in self.listdiagram.dict_diagrams:
diagramVar = IntVar()
diagram = Radiobutton(self.window, text=element, variable=diagramVar, value=1)
diagram.pack(side=BOTTOM, expand=1)
self.diagramVars[self.listdiagram.dict_diagrams.get(element)] = diagramVar
self.validate = Button(self.window, text="Validate", command=self.validateCallBack, width=15, height=3)
self.validate.pack(side=BOTTOM, expand=1)
我有一个可与复选按钮一起使用的代码,但我不知道如何限制选中一个按钮。
感谢您的帮助!
编辑:这是它的样子,值还可以,但都选中了,尽管单选按钮处于选中状态,而另一个未被选中,我无法取消选中它们。
答案 0 :(得分:2)
问:我知道我可以创建单选按钮,但事实是我有相同的变量 和单选按钮的值相同,当我使用单选按钮时,我可以 同时选中两个按钮,而我不能取消选中它们。
Radiobuttons
的工作方式与Checkbuttons
略有不同。使用单选按钮,可以创建“组”,其中只能选择一个组。这样做的方法是让所有Radiobuttons
使用相同的IntVar()
作为其variable=
字段,然后让每个Radiobutton
具有不同的值。
您可以使用enumerate for loop
来循环执行此操作,例如:
diagramVars = {}
diagramVar = IntVar()
for i, element in enumerate(self.listdiagram.dict_diagrams):
diagram = Radiobutton(self.window, text=element, variable=diagramVar, value=i)
diagram.pack(side=BOTTOM, expand=1)
self.diagramVars[self.listdiagram.dict_diagrams.get(element)] = diagramVar
self.validate = Button(self.window, text="Validate", command=self.validateCallBack, width=15, height=3)
self.validate.pack(side=BOTTOM, expand=1)
为此,您不需要字典,因为IntVar的值将是选中的RadioButton。
例如如果选择了Radiobutton
#1,那么diagramVar.get()
将返回0,如果选择了Radiobutton
#2,则diagramVar.get()
将返回1,等等。这是因为多组单选按钮需要相同的IntVar()