2013-12-11 3 views
0

Я пытаюсь создать викторину с множественным выбором в Tkinter.Проверка флажка: как я могу гарантировать, что пользователь может только отметить только одну коробку?

Каждый вопрос имеет от 2-4 разных ответов, все отображаемые как флажки, как я могу гарантировать, что пользователь может отметить только один флажок, а не все из них?

Thanks

+3

Любые причины, по которым вы не хотите использовать радиообъективы? –

+0

@BhajunSingh - избили меня :( –

ответ

0

Не используйте флажки; Вместо этого используйте радуиты. Поведение флажков и радиообъектов хорошо установлено - флажки позволяют выбирать N из N вариантов, радиобуты предназначены для того, чтобы вы могли выбрать ровно 1 из N. Не нарушайте этот шаблон дизайна, или ваши пользователи будут смущены.

Чтобы сделать радиолюбители, создайте один StringVar и свяжите его с двумя или более радиообменами. Все радиокнопки, которые имеют одну и ту же переменную, будут работать как набор, позволяя выбрать только один.

0

Хотя это не указано OP, если вы делаете викторину с несколькими вариантами, также может потребоваться, чтобы определенные вопросы имели определенные флажки, которые были бы взаимоисключающими. Или, попросите пользователя выбрать не более M из N флажков и это требование конкретно указано в вопросе, чтобы пользователь понял шаблон дизайна. Для этого вы можете воспользоваться возможностью обратного вызова 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() 

Этот пример отвечает ФОС конкретный вопрос, но может быть расширен на законных сделать изменения в работе флажков в конкретных ситуациях.

Смежные вопросы