如何将用户限制在一个选中的按钮上?

时间:2019-05-22 15:08:32

标签: python tkinter

我创建了一个带有多个复选按钮的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)

我有一个可与复选按钮一起使用的代码,但我不知道如何限制选中一个按钮。

感谢您的帮助!

编辑:这是它的样子,值还可以,但都选中了,尽管单选按钮处于选中状态,而另一个未被选中,我无法取消选中它们。

https://i.stack.imgur.com/yKJt8.png

图片2:https://i.stack.imgur.com/iOnNV.png

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()