import tkinter as tk
from tkinter import messagebox

class TimerApp:
    def __init__(self, root):
        self.root = root
        self.root.title("定时器")
        self.root.geometry("380x240")
        self.root.resizable(False, False)

        # 倒计时总秒数
        self.total_seconds = 0
        self.running = False
        self.task_id = None

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

        tk.Label(frame_input, text="时").grid(row=0, column=1)
        tk.Label(frame_input, text="分").grid(row=0, column=3)
        tk.Label(frame_input, text="秒").grid(row=0, column=5)

        self.var_h = tk.StringVar(value="0")
        self.var_m = tk.StringVar(value="0")
        self.var_s = tk.StringVar(value="10")

        self.entry_h = tk.Entry(frame_input, textvariable=self.var_h, width=5, font=("Arial", 16), justify="center")
        self.entry_m = tk.Entry(frame_input, textvariable=self.var_m, width=5, font=("Arial", 16), justify="center")
        self.entry_s = tk.Entry(frame_input, textvariable=self.var_s, width=5, font=("Arial", 16), justify="center")

        self.entry_h.grid(row=0, column=0, padx=4)
        self.entry_m.grid(row=0, column=2, padx=4)
        self.entry_s.grid(row=0, column=4, padx=4)

        # 倒计时显示文字
        self.label_time = tk.Label(root, text="00:00:10", font=("Arial", 32))
        self.label_time.pack(pady=5)

        # 按钮区域
        frame_btn = tk.Frame(root)
        frame_btn.pack(pady=15)

        self.btn_start = tk.Button(frame_btn, text="开始", width=8, command=self.start_timer)
        self.btn_pause = tk.Button(frame_btn, text="暂停", width=8, command=self.pause_timer, state=tk.DISABLED)
        self.btn_reset = tk.Button(frame_btn, text="重置", width=8, command=self.reset_timer)

        self.btn_start.grid(row=0, column=0, padx=3)
        self.btn_pause.grid(row=0, column=1, padx=3)
        self.btn_reset.grid(row=0, column=2, padx=3)

    def update_display(self):
        h = self.total_seconds // 3600
        m = (self.total_seconds % 3600) // 60
        s = self.total_seconds % 60
        self.label_time.config(text=f"{h:02d}:{m:02d}:{s:02d}")

    def start_timer(self):
        if not self.running:
            try:
                h = int(self.var_h.get())
                m = int(self.var_m.get())
                s = int(self.var_s.get())
                # 只有未启动时读取时间
                if self.task_id is None:
                    self.total_seconds = h * 3600 + m * 60 + s
            except ValueError:
                messagebox.showerror("错误", "请输入有效的数字！")
                return

            if self.total_seconds <= 0:
                messagebox.showwarning("提示", "时间必须大于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.task_id = self.root.after(1000, self.countdown)
        elif self.total_seconds <= 0:
            self.running = False
            self.btn_start.config(state=tk.NORMAL)
            self.btn_pause.config(state=tk.DISABLED)
            self.task_id = None
            messagebox.showinfo("时间到！", "倒计时结束啦！")

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

    def reset_timer(self):
        self.running = False
        if self.task_id:
            self.root.after_cancel(self.task_id)
            self.task_id = None
        try:
            h = int(self.var_h.get())
            m = int(self.var_m.get())
            s = int(self.var_s.get())
            self.total_seconds = h * 3600 + m * 60 + s
        except:
            self.total_seconds = 0
        self.update_display()
        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()