我正在尝试在Tkinter中创建一个多项选择测验。
每个问题都有2-4个不同的答案都显示为复选框,我如何确保用户只能勾选一个复选框,而不是所有复选框?
谢谢
发布于 2013-12-12 03:24:47
不要使用复选框,而要使用radoibutton。复选框和单选按钮的行为已经确定--复选框允许您从N个选项中选择N个,而单选按钮则设计为允许您从N个选项中选择1个。不要违反此设计模式,否则您的用户会感到困惑。
要使单选按钮工作,请创建一个StringVar并将其与两个或多个单选按钮相关联。所有共享相同变量的单选按钮都将作为一个集合工作,只允许选择一个。
发布于 2013-12-12 04:19:00
尽管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()此示例回答了操作的特定问题,但可以扩展以在特定情况下对复选框的操作进行合法更改。
https://stackoverflow.com/questions/20528082
复制相似问题