
import tkinter as tk
from tkinter import ttk
import random
class MathTest:
def __init__(self, master):
self.master = master
self.master.title("Test di Matematica")
self.master.geometry("400x300")
self.current_question_index = 0
self.score = 0
self.level = 1
self.questions = []
self.setup_ui()
self.start_test()
def setup_ui(self):
self.level_label = ttk.Label(self.master, text="Somme - Livello 1", font=("Arial", 16))
self.level_label.pack(pady=10)
self.progress_var = tk.DoubleVar()
self.progress_bar = ttk.Progressbar(self.master, variable=self.progress_var, maximum=10, length=300)
self.progress_bar.pack(pady=10)
self.question_label = ttk.Label(self.master, text="", font=("Arial", 14))
self.question_label.pack(pady=10)
self.answer_frame = ttk.Frame(self.master)
self.answer_frame.pack(pady=10)
self.result_label = ttk.Label(self.master, text="", font=("Arial", 12))
self.result_label.pack(pady=10)
self.next_button = ttk.Button(self.master, text="Prossima Domanda", command=self.next_question)
self.next_button.pack(pady=10)
self.next_button.config(state="disabled")
self.restart_button = ttk.Button(self.master, text="Ripeti Test", command=self.start_test)
self.restart_button.pack(pady=10)
self.restart_button.config(state="disabled")
def generate_question(self):
max_num = self.level * 10
num1 = random.randint(1, max_num)
num2 = random.randint(1, max_num)
answer = num1 + num2
options = [answer]
while len(options) < 4:
option = random.randint(1, max_num * 2)
if option not in options:
options.append(option)
random.shuffle(options)
return {
"question": f"{num1} + {num2} = ?",
"options": options,
"answer": answer
}
def start_test(self):
self.current_question_index = 0
self.score = 0
self.questions = [self.generate_question() for _ in range(10)]
self.level_label.config(text=f"Somme - Livello {self.level}")
self.load_question()
def load_question(self):
if self.current_question_index < len(self.questions):
question = self.questions[self.current_question_index]
self.question_label.config(text=question["question"])
for widget in self.answer_frame.winfo_children():
widget.destroy()
for option in question["options"]:
button = ttk.Button(self.answer_frame, text=str(option),
command=lambda o=option: self.check_answer(o))
button.pack(side="left", padx=5)
self.next_button.config(state="disabled")
self.result_label.config(text="")
self.update_progress_bar()
else:
self.show_final_result()
def check_answer(self, selected_answer):
correct_answer = self.questions[self.current_question_index]["answer"]
if selected_answer == correct_answer:
self.score += 1
self.result_label.config(text="Corretto!", foreground="green")
else:
self.result_label.config(text=f"Sbagliato! La risposta corretta è {correct_answer}.", foreground="red")
for widget in self.answer_frame.winfo_children():
widget.config(state="disabled")
self.current_question_index += 1
self.next_button.config(state="normal")
def next_question(self):
self.load_question()
def show_final_result(self):
result_message = f"Hai risposto correttamente a {self.score} domande su 10."
if self.score > 7:
self.level += 1
result_message += " Ottimo lavoro! Il prossimo test sarà più difficile."
else:
self.level = 1
self.question_label.config(text="")
for widget in self.answer_frame.winfo_children():
widget.destroy()
self.result_label.config(text=result_message, foreground="black")
self.next_button.config(state="disabled")
self.restart_button.config(state="normal")
def update_progress_bar(self):
progress = (self.current_question_index / len(self.questions)) * 100
self.progress_var.set(progress)
if __name__ == "__main__":
root = tk.Tk()
app = MathTest(root)
root.mainloop()
Subscribe to the newsletter for updates
Tkinter templatesTwitter: @pythonprogrammi - python_pygame
Claude's Games
1. Memory gameVideos
Speech recognition gamePygame's Platform Game