import tkinter as tk
from tkinter import ttk, messagebox
import math

class FractionReduce:
    def __init__(self, root):
        self.root = root
        self.root.title("分数化简约分工具")
        self.root.geometry("400x260")
        self.root.resizable(False, False)

        # 输入区
        frame_in = ttk.LabelFrame(root, text="输入原始分数")
        frame_in.pack(padx=12, pady=8, fill="x")

        ttk.Label(frame_in, text="分子：").grid(row=0, column=0, padx=4, pady=8)
        self.top = tk.StringVar()
        e1 = ttk.Entry(frame_in, textvariable=self.top, width=10, font=("", 12))
        e1.grid(row=0, column=1, padx=3)

        # 修复：font参数移到Label构造函数中
        ttk.Label(frame_in, text="/", font=("", 15)).grid(row=0, column=2, padx=3)

        ttk.Label(frame_in, text="分母：").grid(row=0, column=3, padx=4)
        self.bottom = tk.StringVar()
        e2 = ttk.Entry(frame_in, textvariable=self.bottom, width=10, font=("", 12))
        e2.grid(row=0, column=4, padx=3)

        ttk.Button(frame_in, text="一键约分", command=self.calc).grid(row=0, column=6, padx=8)

        # 结果区
        frame_out = ttk.LabelFrame(root, text="化简结果")
        frame_out.pack(padx=12, pady=5, fill="both", expand=True)
        self.res = tk.Text(frame_out, height=7, font=("微软雅黑", 11))
        self.res.pack(padx=5, pady=5, fill="both")

        ttk.Button(root, text="清空", command=self.clear).pack(pady=3)

    def calc(self):
        try:
            a = int(self.top.get())
            b = int(self.bottom.get())
            if b == 0:
                messagebox.showerror("错误", "分母不能为0！")
                return
            g = math.gcd(a, b)
            new_top = a // g
            new_bot = b // g
            
            # 转带分数
            integer = 0
            rem = new_top
            if abs(new_top) > new_bot:
                integer = new_top // new_bot
                rem = new_top % new_bot
            
            self.res.delete(1.0, tk.END)
            txt = f"原分数：{a}/{b}\n"
            txt += f"最大公约数：{g}\n"
            txt += f"最简分数：{new_top}/{new_bot}\n"
            
            if rem == 0:
                txt += f"整数形式：{integer}"
            elif integer > 0:
                txt += f"带分数：{integer}又{rem}/{new_bot}"
            else:
                txt += f"真分数，无法转为带分数"
            
            self.res.insert(tk.END, txt)
        except ValueError:
            messagebox.showerror("输入错误", "请输入纯数字！")

    def clear(self):
        self.top.set("")
        self.bottom.set("")
        self.res.delete(1.0, tk.END)

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