import tkinter as tk
from tkinter import messagebox
from math import gcd

class FractionSimplifierApp:
    def __init__(self, root):
        self.root = root
        self.root.title("分数化简/约分工具")
        self.root.geometry("400x300")
        self.root.resizable(False, False)
        
        # 设置全局字体和背景
        self.root.configure(bg="#f0f0f0")
        style_font = ("Microsoft YaHei", 12)
        title_font = ("Microsoft YaHei", 16, "bold")
        
        # 标题
        title_label = tk.Label(root, text="🧮 分数化简工具", font=title_font, bg="#f0f0f0", fg="#333")
        title_label.pack(pady=20)
        
        # 输入框区域
        input_frame = tk.Frame(root, bg="#f0f0f0")
        input_frame.pack(pady=10)
        
        tk.Label(input_frame, text="分子:", font=style_font, bg="#f0f0f0").grid(row=0, column=0, padx=5)
        self.numerator_entry = tk.Entry(input_frame, font=style_font, width=10, justify="center")
        self.numerator_entry.grid(row=0, column=1, padx=5)
        
        tk.Label(input_frame, text="分母:", font=style_font, bg="#f0f0f0").grid(row=0, column=2, padx=5)
        self.denominator_entry = tk.Entry(input_frame, font=style_font, width=10, justify="center")
        self.denominator_entry.grid(row=0, column=3, padx=5)
        
        # 快捷输入提示
        hint_label = tk.Label(root, text="💡 提示: 也可以直接在上方输入 '12/8' 格式", 
                              font=("Microsoft YaHei", 9), bg="#f0f0f0", fg="#666")
        hint_label.pack(pady=5)
        
        # 按钮区域
        btn_frame = tk.Frame(root, bg="#f0f0f0")
        btn_frame.pack(pady=10)
        
        simplify_btn = tk.Button(btn_frame, text="✨ 一键化简", font=style_font, 
                                 bg="#4CAF50", fg="white", activebackground="#45a049",
                                 width=15, command=self.simplify_fraction)
        simplify_btn.grid(row=0, column=0, padx=10)
        
        clear_btn = tk.Button(btn_frame, text="🗑️ 清空", font=style_font, 
                              bg="#f44336", fg="white", activebackground="#da190b",
                              width=10, command=self.clear_inputs)
        clear_btn.grid(row=0, column=1, padx=10)
        
        # 结果显示区域
        result_label = tk.Label(root, text="化简结果:", font=style_font, bg="#f0f0f0", fg="#333")
        result_label.pack(pady=(20, 5))
        
        self.result_display = tk.Label(root, text="", font=("Microsoft YaHei", 20, "bold"), 
                                       bg="#ffffff", fg="#2196F3", width=20, height=2,
                                       relief="groove")
        self.result_display.pack(pady=5)
        
        # 绑定回车键触发化简
        self.root.bind('<Return>', lambda event: self.simplify_fraction())

    def parse_input(self):
        """解析输入，支持分开输入和 'a/b' 格式输入"""
        num_text = self.numerator_entry.get().strip()
        den_text = self.denominator_entry.get().strip()
        
        # 如果分子框包含 '/'，尝试按完整分数解析
        if '/' in num_text and not den_text:
            parts = num_text.split('/')
            if len(parts) == 2:
                num_text, den_text = parts[0].strip(), parts[1].strip()
                
        try:
            numerator = int(num_text)
            denominator = int(den_text)
            return numerator, denominator
        except ValueError:
            return None, None

    def simplify_fraction(self):
        num, den = self.parse_input()
        
        if num is None or den is None:
            messagebox.showwarning("输入错误", "请输入有效的整数！\n支持格式: 分开输入 或 '12/8'")
            return
            
        if den == 0:
            messagebox.showerror("数学错误", "分母不能为 0！")
            return
            
        # 处理负号：保证负号只在分子上，或者整体为负
        if den < 0:
            num = -num
            den = -den
            
        # 计算最大公约数并化简
        common_divisor = gcd(abs(num), abs(den))
        simple_num = num // common_divisor
        simple_den = den // common_divisor
        
        # 格式化输出
        if simple_den == 1:
            result_text = f"{simple_num}"
        else:
            result_text = f"{simple_num} / {simple_den}"
            
        self.result_display.config(text=result_text)

    def clear_inputs(self):
        self.numerator_entry.delete(0, tk.END)
        self.denominator_entry.delete(0, tk.END)
        self.result_display.config(text="")
        self.numerator_entry.focus()

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