import tkinter as tk
import time

class StopWatch:
    def __init__(self, root):
        self.root = root
        self.root.title("秒表计时器")
        self.root.geometry("460x240")
        self.root.resizable(False, False)

        # 计时状态
        self.running = False
        self.start_time = 0.0
        self.elapsed = 0.0
        self.task = None

        # 时间显示标签
        self.display_label = tk.Label(
            root,
            text="00:00:00.000",
            font=("Consolas", 48),
            fg="#222222"
        )
        self.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="#42b983", fg="white", font=("",12))
        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="#ff9800", fg="white", font=("",12))
        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="#f44336", fg="white", font=("",12))
        self.btn_reset.grid(row=0, column=2, padx=8)

    def update(self):
        if self.running:
            self.elapsed = time.time() - self.start_time
            h = int(self.elapsed // 3600)
            m = int((self.elapsed % 3600) // 60)
            s = int(self.elapsed % 60)
            ms = int((self.elapsed - int(self.elapsed)) * 1000)
            self.display_label.config(text=f"{h:02d}:{m:02d}:{s:02d}.{ms:03d}")
            self.task = self.root.after(10, self.update)

    def start(self):
        if not self.running:
            self.running = True
            self.start_time = time.time() - self.elapsed
            self.update()

    def pause(self):
        self.running = False
        if self.task:
            self.root.after_cancel(self.task)

    def reset(self):
        self.running = False
        if self.task:
            self.root.after_cancel(self.task)
        self.elapsed = 0.0
        self.display_label.config(text="00:00:00.000")

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