import tkinter as tk
from tkinter import messagebox

class TimerApp:
    def __init__(self, root):
        # 主窗口设置
        self.root = root
        self.root.title("多功能计时器")
        self.root.geometry("450x320")
        self.root.resizable(False, False)

        # 计时变量
        self.running = False
        self.time_value = 0  # 单位：秒
        self.countdown_mode = False  # True=倒计时 False=秒表正向计时
        self.task_id = None

        # 顶部模式切换
        mode_frame = tk.Frame(root)
        mode_frame.pack(pady=10)
        self.mode_btn1 = tk.Button(mode_frame, text="秒表(正向计时)", width=12, command=self.set_stopwatch)
        self.mode_btn1.grid(row=0, column=0, padx=5)
        self.mode_btn2 = tk.Button(mode_frame, text="倒计时", width=12, command=self.set_countdown)
        self.mode_btn2.grid(row=0, column=1, padx=5)

        # 倒计时输入框
        input_frame = tk.Frame(root)
        input_frame.pack(pady=5)
        tk.Label(input_frame, text="倒计时时长(秒)：").grid(row=0, column=0)
        self.count_input = tk.Entry(input_frame, width=10, font=("Arial", 14))
        self.count_input.grid(row=0, column=1, padx=8)
        self.count_input.insert(0, "60")  # 默认60秒
        self.count_input.config(state="disabled")

        # 时间显示大标签
        self.time_label = tk.Label(
            root,
            text="00:00:00",
            font=("Arial", 55, "bold"),
            fg="#222222"
        )
        self.time_label.pack(pady=20)

        # 控制按钮区域
        btn_frame = tk.Frame(root)
        btn_frame.pack(pady=8)
        self.start_btn = tk.Button(btn_frame, text="开始", width=8, height=2, bg="#4CAF50", fg="white", command=self.start_timer)
        self.start_btn.grid(row=0, column=0, padx=4)
        self.pause_btn = tk.Button(btn_frame, text="暂停", width=8, height=2, bg="#FF9800", fg="white", command=self.pause_timer)
        self.pause_btn.grid(row=0, column=1, padx=4)
        self.reset_btn = tk.Button(btn_frame, text="重置", width=8, height=2, bg="#F44336", fg="white", command=self.reset_timer)
        self.reset_btn.grid(row=0, column=2, padx=4)

    # 切换秒表模式
    def set_stopwatch(self):
        self.countdown_mode = False
        self.count_input.config(state="disabled")
        self.reset_timer()

    # 切换倒计时模式
    def set_countdown(self):
        self.countdown_mode = True
        self.count_input.config(state="normal")
        self.reset_timer()

    # 格式化秒数 → 时:分:秒
    def format_time(self, total_sec):
        h = total_sec // 3600
        m = (total_sec % 3600) // 60
        s = total_sec % 60
        return f"{h:02d}:{m:02d}:{s:02d}"

    # 刷新计时数值
    def update_time(self):
        if not self.running:
            return
        if self.countdown_mode:
            self.time_value -= 1
            if self.time_value <= 0:
                self.time_value = 0
                self.running = False
                messagebox.showinfo("提醒", "倒计时结束！")
        else:
            self.time_value += 1

        self.time_label.config(text=self.format_time(self.time_value))
        self.task_id = self.root.after(1000, self.update_time)

    # 开始计时
    def start_timer(self):
        if self.running:
            return
        if self.countdown_mode and self.time_value == 0:
            try:
                self.time_value = int(self.count_input.get())
                if self.time_value <= 0:
                    messagebox.showerror("错误", "请输入大于0的数字")
                    return
            except ValueError:
                messagebox.showerror("错误", "必须填写合法数字！")
                return
        self.running = True
        self.update_time()

    # 暂停计时
    def pause_timer(self):
        self.running = False
        if self.task_id:
            self.root.after_cancel(self.task_id)

    # 全部重置清零
    def reset_timer(self):
        self.running = False
        if self.task_id:
            self.root.after_cancel(self.task_id)
        self.time_value = 0
        self.time_label.config(text="00:00:00")

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