import tkinter as tk
from tkinter import ttk

class TimerApp:
    def __init__(self, root):
        self.root = root
        self.root.title("图形化定时器")
        self.root.geometry("400x300")
        self.root.resizable(False, False)

        # 计时变量
        self.total_seconds = 0
        self.running = False
        self.after_id = None

        # 标题标签
        title_label = ttk.Label(root, text="倒计时定时器", font=("微软雅黑", 20, "bold"))
        title_label.pack(pady=15)

        # 时间输入区域：时:分:秒
        frame_input = ttk.Frame(root)
        frame_input.pack()

        # 时
        ttk.Label(frame_input, text="时").grid(row=0, column=0)
        self.hour_var = tk.StringVar(value="0")
        entry_h = ttk.Entry(frame_input, textvariable=self.hour_var, width=5, font=14)
        entry_h.grid(row=0, column=1, padx=5)

        # 分
        ttk.Label(frame_input, text="分").grid(row=0, column=2)
        self.min_var = tk.StringVar(value="0")
        entry_m = ttk.Entry(frame_input, textvariable=self.min_var, width=5, font=14)
        entry_m.grid(row=0, column=3, padx=5)

        # 秒
        ttk.Label(frame_input, text="秒").grid(row=0, column=4)
        self.sec_var = tk.StringVar(value="0")
        entry_s = ttk.Entry(frame_input, textvariable=self.sec_var, width=5, font=14)
        entry_s.grid(row=0, column=5, padx=5)

        # 倒计时显示大标签
        self.display_var = tk.StringVar(value="00:00:00")
        display_label = ttk.Label(
            root, textvariable=self.display_var,
            font=("Consolas", 36, "bold"), foreground="#d92121"
        )
        display_label.pack(pady=25)

        # 按钮框架
        frame_btn = ttk.Frame(root)
        frame_btn.pack()

        self.btn_start = ttk.Button(frame_btn, text="开始", command=self.start_timer)
        self.btn_start.grid(row=0, column=0, padx=6)

        self.btn_pause = ttk.Button(frame_btn, text="暂停", command=self.pause_timer, state=tk.DISABLED)
        self.btn_pause.grid(row=0, column=1, padx=6)

        self.btn_reset = ttk.Button(frame_btn, text="重置", command=self.reset_timer)
        self.btn_reset.grid(row=0, column=2, padx=6)

    def update_display(self):
        """把总秒数格式化为 时:分:秒"""
        h = self.total_seconds // 3600
        m = (self.total_seconds % 3600) // 60
        s = self.total_seconds % 60
        self.display_var.set(f"{h:02d}:{m:02d}:{s:02d}")

    def start_timer(self):
        if not self.running:
            # 第一次启动，读取输入时间
            if self.total_seconds <= 0:
                try:
                    h = int(self.hour_var.get())
                    m = int(self.min_var.get())
                    s = int(self.sec_var.get())
                    self.total_seconds = h * 3600 + m * 60 + s
                except ValueError:
                    self.display_var.set("输入非法")
                    return
            if self.total_seconds <= 0:
                return

            self.running = True
            self.btn_start.config(state=tk.DISABLED)
            self.btn_pause.config(state=tk.NORMAL)
            self.countdown()

    def countdown(self):
        if self.running and self.total_seconds > 0:
            self.total_seconds -= 1
            self.update_display()
            self.after_id = self.root.after(1000, self.countdown)
        elif self.total_seconds <= 0:
            self.display_var.set("时间到！")
            self.running = False
            self.btn_start.config(state=tk.NORMAL)
            self.btn_pause.config(state=tk.DISABLED)

    def pause_timer(self):
        if self.running:
            self.running = False
            if self.after_id:
                self.root.after_cancel(self.after_id)
            self.btn_start.config(state=tk.NORMAL)
            self.btn_pause.config(state=tk.DISABLED)

    def reset_timer(self):
        self.running = False
        if self.after_id:
            self.root.after_cancel(self.after_id)
        self.total_seconds = 0
        self.hour_var.set("0")
        self.min_var.set("0")
        self.sec_var.set("0")
        self.display_var.set("00:00:00")
        self.btn_start.config(state=tk.NORMAL)
        self.btn_pause.config(state=tk.DISABLED)

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