import tkinter as tk
from tkinter import messagebox

class TimerApp:
    def __init__(self, root):
        self.root = root
        self.root.title("可视化倒计时定时器")
        self.root.geometry("420x260")
        self.root.resizable(False, False)

        # 计时变量
        self.hour = tk.StringVar(value="0")
        self.minute = tk.StringVar(value="0")
        self.second = tk.StringVar(value="10")
        self.running = False
        self.task_id = None

        # 输入布局
        frame1 = tk.Frame(root)
        frame1.pack(pady=20)

        tk.Label(frame1, text="时", font=("微软雅黑",14)).grid(row=0,column=1)
        tk.Label(frame1, text="分", font=("微软雅黑",14)).grid(row=0,column=3)
        tk.Label(frame1, text="秒", font=("微软雅黑",14)).grid(row=0,column=5)

        tk.Entry(frame1, textvariable=self.hour, width=6, font=("微软雅黑",16)).grid(row=0,column=0,padx=6)
        tk.Entry(frame1, textvariable=self.minute, width=6, font=("微软雅黑",16)).grid(row=0,column=2,padx=6)
        tk.Entry(frame1, textvariable=self.second, width=6, font=("微软雅黑",16)).grid(row=0,column=4,padx=6)

        # 时间显示标签
        self.show_label = tk.Label(root, text="00 : 00 : 10", font=("微软雅黑",24),fg="#d83020")
        self.show_label.pack(pady=10)

        # 按钮区
        frame2 = tk.Frame(root)
        frame2.pack(pady=10)

        self.btn_start = tk.Button(frame2, text="开始", command=self.start_timer, width=8, font=("微软雅黑",12))
        self.btn_start.grid(row=0,column=0,padx=5)

        self.btn_pause = tk.Button(frame2, text="暂停", command=self.pause_timer, width=8, font=("微软雅黑",12))
        self.btn_pause.grid(row=0,column=1,padx=5)

        self.btn_reset = tk.Button(frame2, text="重置", command=self.reset_timer, width=8, font=("微软雅黑",12))
        self.btn_reset.grid(row=0,column=2,padx=5)

        self.total_sec = 0

    def refresh_text(self):
        h = self.total_sec // 3600
        m = (self.total_sec % 3600) // 60
        s = self.total_sec % 60
        self.show_label.config(text=f"{h:02d} : {m:02d} : {s:02d}")

    def start_timer(self):
        if not self.running:
            # 初次启动读取输入框时间
            if self.total_sec <= 0:
                try:
                    h = int(self.hour.get())
                    m = int(self.minute.get())
                    s = int(self.second.get())
                    self.total_sec = h * 3600 + m * 60 + s
                except ValueError:
                    messagebox.showerror("错误","请输入合法数字！")
                    return
            self.running = True
            self.count_down()

    def count_down(self):
        if self.running and self.total_sec > 0:
            self.total_sec -= 1
            self.refresh_text()
            self.task_id = self.root.after(1000, self.count_down)
        elif self.total_sec <= 0:
            self.running = False
            messagebox.showinfo("提醒","倒计时结束！")

    def pause_timer(self):
        self.running = False
        if self.task_id is not None:
            self.root.after_cancel(self.task_id)

    def reset_timer(self):
        self.running = False
        if self.task_id is not None:
            self.root.after_cancel(self.task_id)
        try:
            h = int(self.hour.get())
            m = int(self.minute.get())
            s = int(self.second.get())
            self.total_sec = h*3600 + m*60 + s
        except:
            self.total_sec = 0
        self.refresh_text()


if __name__ == "__main__":
    window = tk.Tk()
    app = TimerApp(window)
    window.mainloop()
