复选框验证:我如何确保用户只能勾选一个方框?

时间:2013-12-11 19:19:38

标签: python validation user-interface checkbox tkinter

我正在尝试在Tkinter中创建一个多项选择测验。

每个问题都有2-4个不同的答案,都显示为复选框,如何确保用户只能勾选一个复选框而不是所有复选框?

由于

2 个答案:

答案 0 :(得分:0)

不要使用复选框;使用radoibuttons代替。复选框和单选按钮的行为已经很好地建立了 - 复选框允许您选择N个N个选项,单选按钮旨在让您精确选择N中的一个。不要违反此设计模式,否则您的用户会感到困惑。

要使radiobuttons工作,请创建一个StringVar并将其与两个或更多个radiobuttons相关联。共享相同变量的所有单选按钮都将作为一个集合工作,只允许选择一个。

答案 1 :(得分:0)

虽然OP没有说明,但如果您正在进行多项选择测验,那么某些问题也可能需要特定的复选框相互排斥。或者,要求用户在N个复选框中最多选择M个,并在问题中明确说明此要求,以便用户理解设计模式。为此,您可以利用Checkbuttons的回调选项:

from Tkinter import *
master = Tk()

choices = [IntVar() for x in range(4)]
now = None
buttons = None
def cb():
  global now, buttons
  if None != now:
    buttons[now].deselect()
  vals = [choices[i].get() for i in range(4)]
  try: now = vals.index(1)
  except ValueError: now = None
  print "variables are",str([choices[i].get() for i in range(4)])

buttons = [Checkbutton(master, text="Choice "+str(i), variable=choices[i], command=cb) for i in range(4)]
for b in buttons: b.pack()

mainloop()

此示例回答OP特定问题,但可以扩展以在特定情况下对复选框的操作进行合理更改。