


Помогите tkinter, python
Есть допустим 3 вопроса (1-Что пьет корова?; 2-Какого цвета трава; 3-Какое время года самое холодное?), нужно сделать так, чтобы при запуске кода, слева было 2 кнопки (1-"Вопрос"; 2-"Ответ"), а справа было пустое поле, при нажатии кнопки 1,на пустое поле выводился рандомно 1 из 3 существующих вопросов (допустим Что пьет корова?) и также под ним было поле ввода ответа (надо чтобы оно было крупное) и пользователь мог ввести туда ответ, после нажать кнопку 2 и под полем ввода показывался правильный ответ (вода), а если пользователь не знает ответа, то он может нажать на кнопку 2 и также ответ бы показался снизу под полем ввода, и после повторного нажатия на кнопку ВОПРОС из существующего списка снова выводился рандомно вопрос, но чтобы не повторялся с предыдущим и так до бесконечности пока вопросы не закончатся
import tkinter as tk
import random
# List of questions and answers
data = [
("Что пьет корова?", "Вода"),
("Какого цвета трава?", "Зеленая"),
("Какое время года самое холодное?", "Зима")
]
class QAApp(tk.Tk):
def __init__(self, qa_data):
super().__init__()
self.title("Викторина")
self.geometry("600x300")
self.qa_data = qa_data.copy()
self.used = []
self.current = None
# Left frame for buttons
left_frame = tk.Frame(self)
left_frame.pack(side=tk.LEFT, padx=10, pady=10)
self.btn_question = tk.Button(left_frame, text="Вопрос", width=15, command=self.show_question)
self.btn_question.pack(pady=5)
self.btn_answer = tk.Button(left_frame, text="Ответ", width=15, command=self.show_answer)
self.btn_answer.pack(pady=5)
# Right frame for question, input, and answer
right_frame = tk.Frame(self)
right_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True, padx=10, pady=10)
self.lbl_question = tk.Label(right_frame, text="", wraplength=350, font=(None, 14))
self.lbl_question.pack(pady=5)
self.txt_answer = tk.Text(right_frame, height=3, font=(None, 12))
self.txt_answer.pack(fill=tk.X, pady=5)
self.lbl_correct = tk.Label(right_frame, text="", fg="blue", font=(None, 12))
self.lbl_correct.pack(pady=5)
def show_question(self):
if not self.qa_data:
# Reset when all questions used
self.qa_data = self.used.copy()
self.used.clear()
qa = random.choice(self.qa_data)
self.qa_data.remove(qa)
self.used.append(qa)
self.current = qa
question, _ = qa
# Update UI
self.lbl_question.config(text=question)
self.txt_answer.delete("1.0", tk.END)
self.lbl_correct.config(text="")
def show_answer(self):
if self.current:
_, answer = self.current
self.lbl_correct.config(text=f"Правильный ответ: {answer}")
if __name__ == "__main__":
app = QAApp(data)
app.mainloop()
Я добавила готовое приложение на Tkinter:
Две кнопки слева: «Вопрос» и «Ответ».
При нажатии «Вопрос» справа появится случайный вопрос из списка, поле ввода (Text) очищается, а предыдущий правильный ответ скрывается.
Поле ввода большого размера (несколько строк) чтобы удобно вводить развернутый ответ.
При нажатии «Ответ» под полем ввода отобразится правильный ответ.
Вопросы циклично берутся без повторений, и после исчерпания списка — список сбрасывается и можно начинать заново.