import tkinter as tk
from tkinter import messagebox
import time

class TimerApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Python 极简定时器")
        self.root.geometry("350x250")
        self.root.resizable(False, False)

        # 变量设置
        self.remaining_time = 0
        self.is_running = False
        self.timer_id = None

        self.setup_ui()

    def setup_ui(self):
        # 1. 倒计时数字显示
        self.label_display = tk.Label(self.root, text="00:00", font=("Helvetica", 48))
        self.label_display.pack(pady=20)

        # 2. 输入区域
        input_frame = tk.Frame(self.root)
        input_frame.pack(pady=5)

        tk.Label(input_frame, text="分:").pack(side=tk.LEFT)
        self.entry_min = tk.Entry(input_frame, width=5, justify='center')
        self.entry_min.insert(0, "0")
        self.entry_min.pack(side=tk.LEFT, padx=5)

        tk.Label(input_frame, text="秒:").pack(side=tk.LEFT)
        self.entry_sec = tk.Entry(input_frame, width=5, justify='center')
        self.entry_sec.insert(0, "0")
        self.entry_sec.pack(side=tk.LEFT, padx=5)

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

        self.btn_start = tk.Button(btn_frame, text="开始", command=self.start_timer, bg="#4CAF50", fg="white", width=8)
        self.btn_start.pack(side=tk.LEFT, padx=5)

        self.btn_pause = tk.Button(btn_frame, text="暂停", command=self.pause_timer, state=tk.DISABLED, width=8)
        self.btn_pause.pack(side=tk.LEFT, padx=5)

        self.btn_reset = tk.Button(btn_frame, text="重置", command=self.reset_timer, bg="#f44336", fg="white", width=8)
        self.btn_reset.pack(side=tk.LEFT, padx=5)

    def update_display(self):
        mins, secs = divmod(self.remaining_time, 60)
        self.label_display.config(text=f"{mins:02d}:{secs:02d}")

    def countdown(self):
        if self.is_running and self.remaining_time > 0:
            self.remaining_time -= 1
            self.update_display()
            # 每一秒调用一次自身
            self.timer_id = self.root.after(1000, self.countdown)
        elif self.remaining_time <= 0:
            self.is_running = False
            self.update_display()
            messagebox.showinfo("时间到", "计时结束！")
            self.reset_timer()

    def start_timer(self):
        if not self.is_running:
            # 如果是从零开始，读取输入框的值
            if self.remaining_time == 0:
                try:
                    m = int(self.entry_min.get())
                    s = int(self.entry_sec.get())
                    self.remaining_time = m * 60 + s
                except ValueError:
                    messagebox.showerror("错误", "请输入有效的数字")
                    return

            if self.remaining_time > 0:
                self.is_running = True
                self.btn_start.config(state=tk.DISABLED)
                self.btn_pause.config(state=tk.NORMAL)
                self.entry_min.config(state=tk.DISABLED)
                self.entry_sec.config(state=tk.DISABLED)
                self.countdown()

    def pause_timer(self):
        if self.is_running:
            self.is_running = False
            if self.timer_id:
                self.root.after_cancel(self.timer_id)
            self.btn_start.config(state=tk.NORMAL, text="继续")
            self.btn_pause.config(state=tk.DISABLED)

    def reset_timer(self):
        self.is_running = False
        if self.timer_id:
            self.root.after_cancel(self.timer_id)
        self.remaining_time = 0
        self.update_display()
        self.btn_start.config(state=tk.NORMAL, text="开始")
        self.btn_pause.config(state=tk.DISABLED)
        self.entry_min.config(state=tk.NORMAL)
        self.entry_sec.config(state=tk.NORMAL)

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