import tkinter as tk
from tkinter import messagebox
import time
from threading import Thread

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

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

        # 标题标签
        tk.Label(root, text="倒计时定时器", font=("黑体", 20)).pack(pady=10)

        # 输入区域
        frame_input = tk.Frame(root)
        frame_input.pack(pady=5)
        tk.Label(frame_input, text="时").grid(row=0, column=0)
        self.var_h = tk.StringVar(value="0")
        tk.Entry(frame_input, textvariable=self.var_h, width=5, font=14).grid(row=0, column=1, padx=4)

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

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

        # 时间显示大屏
        self.show_text = tk.StringVar(value="00:00:10")
        tk.Label(root, textvariable=self.show_text, font=("Arial", 40), fg="#d62828").pack(pady=20)

        # 按钮区域
        frame_btn = tk.Frame(root)
        frame_btn.pack(pady=5)
        self.btn_start = tk.Button(frame_btn, text="开始", width=8, command=self.start_timer, bg="#43aa8b")
        self.btn_start.grid(row=0, column=0, padx=5)

        self.btn_pause = tk.Button(frame_btn, text="暂停", width=8, command=self.pause_timer, bg="#f9c74f")
        self.btn_pause.grid(row=0, column=1, padx=5)

        self.btn_reset = tk.Button(frame_btn, text="重置", width=8, command=self.reset_timer, bg="#f3722c")
        self.btn_reset.grid(row=0, column=2, padx=5)

    def calc_seconds(self):
        """把时分秒转为总秒数"""
        try:
            h = int(self.var_h.get())
            m = int(self.var_m.get())
            s = int(self.var_s.get())
            return h * 3600 + m * 60 + s
        except ValueError:
            messagebox.showerror("错误", "请输入纯数字！")
            return -1

    def update_display(self, sec):
        """更新界面时间文字"""
        h = sec // 3600
        m = (sec % 3600) // 60
        s = sec % 60
        self.show_text.set(f"{h:02d}:{m:02d}:{s:02d}")

    def timer_loop(self):
        """倒计时循环（子线程，不卡死窗口）"""
        while self.total_seconds > 0 and self.running:
            if self.pause:
                time.sleep(0.1)
                continue
            self.update_display(self.total_seconds)
            time.sleep(1)
            self.total_seconds -= 1
        # 时间到
        if self.total_seconds <= 0 and self.running:
            self.running = False
            self.update_display(0)
            messagebox.showinfo("提示", "时间到！⏰")

    def start_timer(self):
        if self.running and not self.pause:
            return
        if not self.running:
            # 初次启动
            total = self.calc_seconds()
            if total <= 0:
                return
            self.total_seconds = total
            self.running = True
            self.pause = False
            self.thread = Thread(target=self.timer_loop, daemon=True)
            self.thread.start()
        else:
            # 恢复暂停
            self.pause = False

    def pause_timer(self):
        if self.running:
            self.pause = True

    def reset_timer(self):
        self.running = False
        self.pause = False
        self.total_seconds = 0
        self.show_text.set("00:00:00")

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