【问题标题】:How to restrain user to one checkbuttons checked tkinter python如何限制用户使用一个检查按钮检查 tkinter python
【发布时间】:2019-05-23 16:13:40
【问题描述】:

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

【问题讨论】:

  • 一组单选按钮必须共享同一个变量才能正常工作(并被赋予不同的value= 选项,以便您知道选择了哪个)。
  • 单选按钮专门设计用于使用户能够从组中做出单一选择。从可用性的角度来看,使用复选按钮会让用户感到困惑。

标签: python tkinter


【解决方案1】:

问:我知道我可以创建单选按钮,但事实是我有相同的变量 单选按钮的值相同,当我使用单选按钮时,我可以 选中两个按钮,我无法取消选中它们。

RadiobuttonsCheckbuttons 的工作方式略有不同。使用单选按钮,您可以创建“组”,其中只能选择其中一个组。这样做的方法是让所有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,等等。这是因为单选按钮组需要相同的@ 987654333@

【讨论】:

  • 谢谢,但我也有同样奇怪的问题。当我运行我的应用程序时,其中一个单选按钮已被选中,如果我检查另一个单选按钮,它们都保持选中状态,我无法取消选择它们
  • 我编辑了原始帖子,并附上了它的截图
  • @Lucas 哦,抱歉,是的,我不小心忘记删除一行代码,我仍然在里面定义了 diagramVar,它现在应该可以工作了。
  • 在你回答之前,我试过这个,它解决了两个被选中的问题,但现在两个变量都相等(我把截图放在我原来帖子的末尾!)
  • @Lucas 我在回答中解释了这一点。这是因为 radioButtons 现在共享相同的 IntVar() 变量,所以现在 intVar 表示按下的是哪个 radioButton,而不是单选按钮本身是否被按下。
猜你喜欢
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 2019-07-10
相关资源
最近更新 更多