import tkinter as tk
import random
from tkinter import messagebox

class MathTrainer:
    def __init__(self, root):
        self.root = root
        self.root.title("限时口算训练器")
        self.root.geometry("540x360")

        # 设置
        self.time_limit = 60  # 秒
        self.remain_time = self.time_limit
        self.score = 0
        self.total = 0
        self.running = False

        # 变量
        self.q_text = tk.StringVar(value="点击【开始训练】")
        self.time_text = tk.StringVar(value=f"剩余时间：{self.remain_time} s")
        self.info_text = tk.StringVar(value="得分：0 | 总题：0")
        self.ans_var = tk.StringVar()

        # UI
        tk.Label(root, textvariable=self.time_text, font=("SimHei",14)).pack(pady=8)
        tk.Label(root, textvariable=self.q_text, font=("SimHei",20)).pack(pady=12)

        frame_input = tk.Frame(root)
        frame_input.pack()
        tk.Label(frame_input, text="你的答案：", font=("SimHei",13)).grid(row=0,column=0)
        entry = tk.Entry(frame_input, textvariable=self.ans_var, font=("SimHei",14), width=8)
        entry.grid(row=0,column=1,padx=10)
        entry.bind("<Return>", self.check_answer)  #回车提交

        frame_btn = tk.Frame(root)
        frame_btn.pack(pady=20)
        tk.Button(frame_btn, text="开始训练", command=self.start, font=("SimHei",11)).grid(row=0,column=0,padx=8)
        tk.Button(frame_btn, text="提交答案", command=self.check_answer, font=("SimHei",11)).grid(row=0,column=1,padx=8)
        tk.Button(frame_btn, text="重置", command=self.reset_all, font=("SimHei",11)).grid(row=0,column=2,padx=8)

        tk.Label(root, textvariable=self.info_text, font=("SimHei",13)).pack()

        self.a = self.b = self.op = self.res = 0

    def gen_question(self):
        # 随机算式 0~20 加减乘
        self.a = random.randint(1,20)
        self.b = random.randint(1,20)
        ops = [("+",lambda x,y:x+y),("-",lambda x,y:x-y),("×",lambda x,y:x*y)]
        self.op,func = random.choice(ops)
        self.res = func(self.a,self.b)
        self.q_text.set(f"{self.a} {self.op} {self.b} = ?")
        self.ans_var.set("")

    def start(self):
        if self.running:
            return
        self.running = True
        self.gen_question()
        self.countdown()

    def countdown(self):
        if not self.running:
            return
        self.remain_time -=1
        self.time_text.set(f"剩余时间：{self.remain_time} s")
        if self.remain_time <=0:
            self.running = False
            rate = self.score/self.total if self.total>0 else 0
            messagebox.showinfo("时间到！",
                f"训练结束\n答对：{self.score} 题\n总题：{self.total} 题\n正确率：{rate:.1%}")
            self.q_text.set("训练结束，请重置再开始")
            return
        self.root.after(1000,self.countdown)

    def check_answer(self,event=None):
        if not self.running:
            return
        try:
            user_ans = int(self.ans_var.get())
        except ValueError:
            return
        self.total +=1
        if user_ans == self.res:
            self.score +=1
        self.info_text.set(f"得分：{self.score} | 总题：{self.total}")
        self.gen_question()

    def reset_all(self):
        self.running = False
        self.remain_time = self.time_limit
        self.score = 0
        self.total = 0
        self.time_text.set(f"剩余时间：{self.remain_time} s")
        self.info_text.set("得分：0 | 总题：0")
        self.q_text.set("点击【开始训练】")
        self.ans_var.set("")

if __name__ == "__main__":
    win = tk.Tk()
    app = MathTrainer(win)
    win.mainloop()
