Настройка:
Система: Windows 10 Home x64
Версия Python: 3.7.4
Программное обеспечение: Pycharm или IDLE
Я работаю над "приложением", которое в основном состоит изигра-викторина, но когда она входит в цикл, программа не ожидает нажатия пользователем кнопки в разделе кнопок ответов, код запускается только при последнем вопросе в списке (в основном происходит при каждом вопросе и не ожидает нажатия любой кнопки)что я дал (qaList), отображая последний вопрос и возможные ответы на этот вопрос в форме кнопки.
Я хотел дать один вопрос за раз, рандомизируя порядок каждый раз, когда я запускаю приложение, иукажите возможные ответы на вопрос в форме кнопки и дождитесь выбора пользователя. Затем просто напечатайте на консоли, если это правильно или неправильно, и переходите к следующему вопросу, но я не могу этого сделать.
Я выбираю цикл, потому что когда я хочу добавить ещевопросы к программе, я могу сделать это почти без каких-либо усилий.
Есть ли способ заставить этот цикл ждать выбора пользователя и просто продолжать, когда пользователь нажимает любую кнопку ответа?
Мой (часть вопроса) код:
import random
import tkinter as tk
width = 640 # Largura
height = 480 # Altura
# GUI SYSTEM
root = tk.Tk()
canvas = tk.Canvas(root, height=height, width=width)
canvas.pack()
def play_quiz():
class pergunta_resposta:
def __init__(self, question, answer, options):
self.question = question
self.answer = answer
self.options = options
# ===================list with this order ('question', 'right answer', [3 other possible answers]===================
qaList = [pergunta_resposta("", "", ["", "", ""]),
pergunta_resposta("", "", ["", "", ""]),
pergunta_resposta("", "", ["", "", ""]),
pergunta_resposta("", "", ["", "", ""]),
pergunta_resposta("", "", ["", "", ""]),
pergunta_resposta("", "", ["", "", ""]),
pergunta_resposta("", "", ["", "", ""])]
# ===================randomise the order of the questions inside the list===================
random.shuffle(qaList)
# ===================for loop to go on every single question===================
for Item in qaList:
frame = tk.Frame(root, bg='white')
frame.place(rely=0.05, relx=0.05, relheight=0.25, relwidth=0.9)
ask = tk.Label(frame, text=Item.question, font=("Impact", 15))
ask.pack(expand=True)
possible = Item.options + [Item.answer]
random.shuffle(possible)
# ===================possible answers buttons functions===================
def button(n):
global correct
if possible[n] == Item.answer:
print('Right')
correct = 1
elif possible[n] != Item.answer:
print('Wrong!')
correct = 0
# ===================frame for possible answers buttons===================
frame1 = tk.Frame(root, bg='white')
frame1.place(rely=0.35, relx=0.15, relheight=0.4, relwidth=0.7)
# possible answers buttons
answer1 = tk.Button(frame1, text=possible[0], font=("Impact", 15), command=lambda: button(0))
answer1.pack(fill='both', expand=True)
answer2 = tk.Button(frame1, text=possible[1], font=("Impact", 15), command=lambda: button(1))
answer2.pack(fill='both', expand=True)
answer3 = tk.Button(frame1, text=possible[2], font=("Impact", 15), command=lambda: button(2))
answer3.pack(fill='both', expand=True)
answer4 = tk.Button(frame1, text=possible[3], font=("Impact", 15), command=lambda: button(3))
answer4.pack(fill='both', expand=True)
play_quiz()
root.mainloop()