import tkinter as tk
from tkinter import messagebox
import time
import winsound  # Windows 系统提示音，其他系统可替换

class TimerApp:
    def __init__(self, root):
        # 主窗口设置
        self.root = root
        self.root.title("简易定时器")
        self.root.geometry("400x300")
        self.root.resizable(False, False)  # 禁止窗口缩放

        # 定时器核心变量
        self.remaining_time = 0  # 剩余时间（秒）
        self.timer_running = False  # 定时器运行状态
        self.timer_id = None  # 定时器任务ID

        # 界面组件创建
        self.create_widgets()

    def create_widgets(self):
        # 1. 时间输入区域
        input_frame = tk.Frame(self.root, pady=20)
        input_frame.pack(fill=tk.X, padx=20)

        tk.Label(input_frame, text="设置时间（分钟）：", font=("Arial", 12)).pack(side=tk.LEFT)
        self.time_entry = tk.Entry(input_frame, font=("Arial", 12), width=10)
        self.time_entry.pack(side=tk.LEFT, padx=10)
        self.time_entry.insert(0, "1")  # 默认1分钟

        # 2. 时间显示区域
        self.time_label = tk.Label(
            self.root, 
            text="01:00", 
            font=("Arial", 36, "bold"),
            fg="#333333"
        )
        self.time_label.pack(pady=20)

        # 3. 按钮区域
        btn_frame = tk.Frame(self.root)
        btn_frame.pack(pady=10)

        # 开始/暂停按钮
        self.start_btn = tk.Button(
            btn_frame,
            text="开始",
            font=("Arial", 12),
            width=8,
            command=self.toggle_timer
        )
        self.start_btn.grid(row=0, column=0, padx=10)

        # 重置按钮
        self.reset_btn = tk.Button(
            btn_frame,
            text="重置",
            font=("Arial", 12),
            width=8,
            command=self.reset_timer
        )
        self.reset_btn.grid(row=0, column=1, padx=10)

    def format_time(self, seconds):
        """将秒数格式化为 分:秒（MM:SS）的形式"""
        mins = seconds // 60
        secs = seconds % 60
        return f"{mins:02d}:{secs:02d}"

    def toggle_timer(self):
        """开始/暂停定时器切换"""
        if not self.timer_running:
            # 首次启动：获取输入的分钟数
            if self.remaining_time == 0:
                try:
                    minutes = float(self.time_entry.get())
                    if minutes <= 0:
                        messagebox.showerror("错误", "请输入大于0的数字！")
                        return
                    self.remaining_time = int(minutes * 60)
                except ValueError:
                    messagebox.showerror("错误", "请输入有效的数字！")
                    return
            
            # 启动定时器
            self.timer_running = True
            self.start_btn.config(text="暂停")
            self.update_timer()
        else:
            # 暂停定时器
            self.timer_running = False
            self.start_btn.config(text="继续")
            if self.timer_id:
                self.root.after_cancel(self.timer_id)

    def update_timer(self):
        """更新定时器显示"""
        if self.timer_running and self.remaining_time > 0:
            # 更新显示文本
            self.time_label.config(text=self.format_time(self.remaining_time))
            self.remaining_time -= 1
            # 1秒后再次调用自身
            self.timer_id = self.root.after(1000, self.update_timer)
        elif self.remaining_time == 0 and self.timer_running:
            # 时间到：提示用户
            self.timer_running = False
            self.start_btn.config(text="开始")
            self.time_label.config(text="00:00")
            # 播放提示音（Windows）
            winsound.Beep(1000, 1000)  # 1000Hz 频率，1秒时长
            messagebox.showinfo("提示", "时间到！")

    def reset_timer(self):
        """重置定时器"""
        # 停止正在运行的定时器
        if self.timer_id:
            self.root.after_cancel(self.timer_id)
        self.timer_running = False
        self.remaining_time = 0
        self.start_btn.config(text="开始")
        self.time_label.config(text=self.format_time(int(float(self.time_entry.get()) * 60)))

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