import tkinter as tk
from tkinter import font
import time

class StopwatchGUI:
    def __init__(self, root):
        self.root = root
        self.root.title("图形化计时器（秒表）")
        self.root.geometry("450x280")
        self.root.resizable(False, False)
        self.root.configure(bg="#1a1a1a")

        # 计时状态变量
        self.running = False
        self.start_time = 0
        self.elapsed = 0

        # 大号时间显示字体
        time_font = font.Font(family="Arial", size=48, weight="bold")
        self.time_str = tk.StringVar(value="00:00:00.00")
        label_time = tk.Label(
            root,
            textvariable=self.time_str,
            font=time_font,
            fg="#00ee88",
            bg="#1a1a1a"
        )
        label_time.pack(pady=40)

        # 按钮容器
        frame_btn = tk.Frame(root, bg="#1a1a1a")
        frame_btn.pack()

        # 开始按钮
        self.btn_start = tk.Button(
            frame_btn,
            text="开始",
            width=8,
            height=2,
            font=("黑体", 14),
            bg="#28a745",
            fg="white",
            command=self.start
        )
        self.btn_start.grid(row=0, column=0, padx=8)

        # 暂停按钮
        self.btn_pause = tk.Button(
            frame_btn,
            text="暂停",
            width=8,
            height=2,
            font=("黑体", 14),
            bg="#ffc107",
            fg="black",
            command=self.pause
        )
        self.btn_pause.grid(row=0, column=1, padx=8)

        # 重置按钮
        self.btn_reset = tk.Button(
            frame_btn,
            text="重置",
            width=8,
            height=2,
            font=("黑体", 14),
            bg="#dc3545",
            fg="white",
            command=self.reset
        )
        self.btn_reset.grid(row=0, column=2, padx=8)

        # 刷新时间
        self.update_clock()

    def update_clock(self):
        if self.running:
            current = time.perf_counter()
            self.elapsed = current - self.start_time

        # 换算时分秒毫秒
        total_sec = self.elapsed
        hour = int(total_sec // 3600)
        minute = int((total_sec % 3600) // 60)
        second = int(total_sec % 60)
        ms = int((total_sec - int(total_sec)) * 100)

        self.time_str.set(f"{hour:02d}:{minute:02d}:{second:02d}.{ms:02d}")
        self.root.after(10, self.update_clock)

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

    def pause(self):
        self.running = False

    def reset(self):
        self.running = False
        self.elapsed = 0
        self.time_str.set("00:00:00.00")

if __name__ == "__main__":
    win = tk.Tk()
    app = StopwatchGUI(win)
    win.mainloop()