我正在尝试在Tkinter中创建一个多项选择测验。
每个问题都有2-4个不同的答案,都显示为复选框,如何确保用户只能勾选一个复选框而不是所有复选框?
由于
答案 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特定问题,但可以扩展以在特定情况下对复选框的操作进行合理更改。