import tkinter as tk

class Stopwatch:
    def __init__(self, root):
        # 主窗口设置
        self.root = root
        self.root.title("计时器（秒表）")
        self.root.geometry("420x220")
        self.root.resizable(False, False)

        # 计时状态变量
        self.running = False
        self.total_ms = 0  # 总毫秒数
        self.after_task = None

        # 时间显示标签
        self.time_text = tk.StringVar(value="00:00:00.000")
        display_label = tk.Label(
            root,
            textvariable=self.time_text,
            font=("Consolas", 42, "bold"),
            fg="#c82423"
        )
        display_label.pack(pady=30)

        # 按钮容器
        btn_frame = tk.Frame(root)
        btn_frame.pack()

        # 三个功能按钮
        self.btn_start = tk.Button(
            btn_frame, text="开始", width=8, height=2,
            command=self.start, bg="#45b7d1", font=("微软雅黑", 11)
        )
        self.btn_start.grid(row=0, column=0, padx=8)

        self.btn_pause = tk.Button(
            btn_frame, text="暂停", width=8, height=2,
            command=self.pause, bg="#f9bc60", font=("微软雅黑", 11),
            state=tk.DISABLED
        )
        self.btn_pause.grid(row=0, column=1, padx=8)

        self.btn_reset = tk.Button(
            btn_frame, text="重置", width=8, height=2,
            command=self.reset, bg="#e63946", font=("微软雅黑", 11)
        )
        self.btn_reset.grid(row=0, column=2, padx=8)

    def update_time(self):
        """将总毫秒数格式化为 时:分:秒.毫秒"""
        hours = self.total_ms // 3600000
        remain = self.total_ms % 3600000
        mins = remain // 60000
        secs = (remain % 60000) // 1000
        ms = remain % 1000
        self.time_text.set(f"{hours:02d}:{mins:02d}:{secs:02d}.{ms:03d}")

    def tick(self):
        if self.running:
            self.total_ms += 10
            self.update_time()
            self.after_task = self.root.after(10, self.tick)

    def start(self):
        if not self.running:
            self.running = True
            self.btn_start.config(state=tk.DISABLED)
            self.btn_pause.config(state=tk.NORMAL)
            self.tick()

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

    def reset(self):
        self.running = False
        if self.after_task:
            self.root.after_cancel(self.after_task)
        self.total_ms = 0
        self.update_time()
        self.btn_start.config(state=tk.NORMAL)
        self.btn_pause.config(state=tk.DISABLED)

if __name__ == "__main__":
    main_window = tk.Tk()
    app = Stopwatch(main_window)
    main_window.mainloop()