import tkinter as tk
from tkinter import ttk
import time

class TimerApp:
    def __init__(self, root):
        # 初始化主窗口
        self.root = root
        self.root.title("简易计时器")
        self.root.geometry("400x200")
        self.root.resizable(False, False)  # 固定窗口大小
        
        # 计时器核心变量
        self.running = False  # 标记计时器是否运行
        self.start_time = 0  # 记录开始时间
        self.elapsed_time = 0  # 记录已流逝时间
        
        # 创建界面组件
        self._create_widgets()
        
    def _create_widgets(self):
        # 1. 显示时间的标签
        self.time_label = ttk.Label(
            self.root,
            text="00:00:00.000",
            font=("Arial", 36, "bold"),
            foreground="#333333"
        )
        self.time_label.pack(pady=30)
        
        # 2. 按钮容器
        button_frame = ttk.Frame(self.root)
        button_frame.pack(pady=10)
        
        # 开始/暂停按钮
        self.start_pause_btn = ttk.Button(
            button_frame,
            text="开始",
            command=self.toggle_timer,
            width=10
        )
        self.start_pause_btn.grid(row=0, column=0, padx=5)
        
        # 重置按钮
        self.reset_btn = ttk.Button(
            button_frame,
            text="重置",
            command=self.reset_timer,
            width=10
        )
        self.reset_btn.grid(row=0, column=1, padx=5)
        
    def toggle_timer(self):
        """切换计时器状态：开始/暂停"""
        if not self.running:
            # 开始计时
            self.running = True
            self.start_time = time.time() - self.elapsed_time  # 兼容暂停后继续
            self.start_pause_btn.config(text="暂停")
            self._update_timer()
        else:
            # 暂停计时
            self.running = False
            self.start_pause_btn.config(text="继续")
    
    def _update_timer(self):
        """更新计时器显示"""
        if self.running:
            # 计算已流逝时间
            self.elapsed_time = time.time() - self.start_time
            
            # 格式化时间：时:分:秒.毫秒
            hours = int(self.elapsed_time // 3600)
            minutes = int((self.elapsed_time % 3600) // 60)
            seconds = int(self.elapsed_time % 60)
            milliseconds = int((self.elapsed_time - int(self.elapsed_time)) * 1000)
            
            # 补零，保证格式统一
            time_str = f"{hours:02d}:{minutes:02d}:{seconds:02d}.{milliseconds:03d}"
            self.time_label.config(text=time_str)
            
            # 每10毫秒更新一次（保证毫秒级显示）
            self.root.after(10, self._update_timer)
    
    def reset_timer(self):
        """重置计时器"""
        self.running = False
        self.elapsed_time = 0
        self.start_pause_btn.config(text="开始")
        self.time_label.config(text="00:00:00.000")

if __name__ == "__main__":
    # 创建主窗口并运行程序
    root = tk.Tk()
    app = TimerApp(root)
    root.mainloop()