Сделайте так, чтобы радио-кнопка добавляла 1 только один раз вместо 1 за клики - PullRequest
0 голосов
/ 19 мая 2019

Я провел тест в Tkinter для школы.

Чтобы ответить на вопрос, вы выбираете радиокнопку, но когда вы нажимаете 3 раза на хорошую радиокнопку, она добавляет 3 балла вместо 1 ...

Кто-нибудь может мне помочь?

Спасибо всем!

Я пробовал что-то еще с переменной и значением, но у него проблемы с глобальным счетом ...

Q1 = Label(fenetre2, text="1) Comment se nomme le président français?", font='Helvetica 10 bold')
Q1.pack()
Q1A = Radiobutton(fenetre2, text="Nicolas Sarkozy", value=2, variable=rep1)
Q1A.pack()
Q1B = Radiobutton(fenetre2, text="Emmanuel Macron", command=ajouter1, value=1, variable=rep1)
Q1B.pack()
Q1C = Radiobutton(fenetre2, text="François Hollande", value= 3, variable=rep1)
Q1C.pack()

def ajouter1():
    global score
    score+=1
    Score = "Bravo, Votre score est de: " + str(score) + "/10"
    var_label.set(Score)

Score = Label(fenetre3, textvariable=var_label, font='Helvetica 10 bold')
var_label.set("Bravo, Votre score est de: 0/10")
Score.pack()    

1 Ответ

0 голосов
/ 19 мая 2019

Может быть несколько подходов, чтобы сделать то, что вы хотите, я бы предложил вам добавить Button, который при нажатии проверит ответ и перейдет на следующую страницу, чтобы не было лишних проблем с оценкой, хотя я предполагаю, что вы, вероятно, есть одна страница и содержит несколько вопросов, так что вот некоторые идеи, которые можно использовать для решения вашей проблемы.

Я назначил список, в котором будет храниться правильный ответ в функции ajouter1() и проверил, есть ли этот ответ в списке (if ans not in score_list:). Также передавая аргумент функции с помощью lambda: ajouter1("A1"). Вот как вы передаете параметры функции в tkinter.

Пример:

...

score_list = []

def ajouter1( ans ):
    global score
    if ans not in score_list:
        score+=1
        Score = "Bravo, Votre score est de: " + str(score) + "/10"
        var_label.set(Score)
        score_list.append(ans)

Q1 = Label(root, text="1) Comment se nomme le président français?", font='Helvetica 10 bold')
Q1.pack()
Q1A = Radiobutton(root, text="Nicolas Sarkozy", value=2, variable=rep1)
Q1A.pack()
Q1B = Radiobutton(root, text="Emmanuel Macron", value=1, variable=rep1, command=lambda: ajouter1('A1'))
Q1B.pack()
Q1C = Radiobutton(root, text="François Hollande", value= 3, variable=rep1)
Q1C.pack()

...

Другой подход, который я могу придумать, - когда пользователь нажимает на любой из Radiobutton вопроса, тогда состояние этих Radiobutton переходит отключено , поэтому пользователь не будет обманывать.

Примерно так:

enter image description here

def ajouter1( ans ):
    global score
    if ans:
        score+=1
    Score = "Bravo, Votre score est de: " + str(score) + "/10"
    var_label.set(Score)

    Q1A['state'] = 'disabled'
    Q1B['state'] = 'disabled'
    Q1C['state'] = 'disabled'

Q1 = Label(root, text="1) Comment se nomme le président français?", font='Helvetica 10 bold')
Q1.pack()
Q1A = Radiobutton(root, text="Nicolas Sarkozy", value=2, variable=rep1, command=lambda: ajouter1(False))
Q1A.pack()
Q1B = Radiobutton(root, text="Emmanuel Macron", value=1, variable=rep1, command=lambda: ajouter1(True))
Q1B.pack()
Q1C = Radiobutton(root, text="François Hollande", value= 3, variable=rep1, command=lambda: ajouter1(False))
Q1C.pack()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...