Как дождаться ввода в виджет Entry в tkinter - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь пройти тест в tkinter, и у меня есть пять вопросов. Но я хочу дождаться ответа, который будет введен в виджет ввода. Я знаю, что мне, вероятно, понадобится кнопка, но я не знаю, как мне это сделать. Мой код пока:

for i in range(5):
        randChoose = random.choice(choose)
        questionLabel = Label(top, text=full[randChoose]).grid(row=0, column=0)
        answerLabel = Label(top, text="Answer:").grid(row=1, column=0)
        answerEntry = Entry(top, borderwidth=5).grid(row=1,column=1)

        if answerEntry.get() == aFull[randChoose]:
            correctLabel = Label(top, text="Correct!",fg="green").grid(row=2,column=0)
            score += 1
            scoreLabel = Label(top, text=f"Your Score is {score}",fg="green").grid(row=2,column=1)
        else:
            wrongLabel = Label(top, text="Incorrect!",fg="red").grid(row=2,column=0)
            scoreLabel = Label(top, text=f"Your Score is {score}",fg="red").grid(row=2,column=1)
        choose.remove(randChoose)

1 Ответ

1 голос
/ 07 февраля 2020

Сначала добавьте кнопку

button_pressed = StringVar()

эта переменная button_pressed сообщит нам, была ли нажата кнопка или нет
(мы установили button_pressed в StringVar() поэтому .set() может изменить эту переменную в команде кнопки)

button = Button(app, text="Enter", command=lambda: button_pressed.set("button pressed"))

при нажатии кнопки переменная button_pressed будет установлена ​​в «нажатие кнопки»

button.grid(row=1, column=1)

Затем подождите, пока кнопка не будет нажата

button.wait_variable(button_pressed)

этот код будет ждать, пока переменная button_pressed не изменится (на что-либо)

Наконец, проверьте запись

if answerEntry.get() == aFull[randChoose]: et c.

Окончательный код должен выглядеть примерно так:

for i in range(5):
        randChoose = random.choice(choose)
        questionLabel = Label(app, text=full[randChoose]).grid(row=0, column=0)
        answerLabel = Label(app, text="Answer:").grid(row=1, column=0)
        answerEntry = Entry(app, borderwidth=5).grid(row=1,column=1)

        button_pressed = StringVar()
        button = Button(app, text="Enter", command=lambda: button_pressed.set("button pressed"))
        button.grid(row=1, column=1)

        button.wait_variable(button_pressed)

        if answerEntry.get() == aFull[randChoose]:
            correctLabel = Label(app, text="Correct!", fg="green").grid(row=2, column=0)
            score += 1
            scoreLabel = Label(app, text="Your Score is {score}", fg="green").grid(row=2, column=1)
        else:
            wrongLabel = Label(app, text="Incorrect!", fg="red").grid(row=2, column=0)
            scoreLabel = Label(app, text="Your Score is {score}", fg="red").grid(row=2, column=1)
        choose.remove(randChoose)

, и вы, вероятно, захотите уничтожить эту кнопку, поэтому при следующем вопросе она не будет отображать 2 кнопки

button.destroy()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...