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

def reduce_fraction():
    try:
        numerator = int(entry_num.get())
        denominator = int(entry_den.get())

        if denominator == 0:
            messagebox.showerror("错误", "分母不能为0！")
            return

        # 最大公约数
        gcd_val = math.gcd(abs(numerator), abs(denominator))
        sim_num = numerator // gcd_val
        sim_den = denominator // gcd_val

        # 区分假分数，转换成带分数
        if abs(sim_num) > sim_den and sim_den != 1:
            integer_part = sim_num // sim_den
            remainder = abs(sim_num) % sim_den
            if remainder == 0:
                result_text = f"化简结果：{integer_part}"
            else:
                result_text = f"化简结果：{integer_part}又{remainder}/{sim_den}"
        elif sim_den == 1:
            result_text = f"化简结果：{sim_num}"
        else:
            result_text = f"化简结果：{sim_num}/{sim_den}"

        label_result.config(text=result_text)

    except ValueError:
        messagebox.showerror("输入错误", "请输入整数！")

# 创建窗口
root = tk.Tk()
root.title("分数约分工具")
root.geometry("420x220")
root.resizable(False, False)

# 布局组件
main_frame = ttk.Frame(root, padding=25)
main_frame.pack(fill=tk.BOTH, expand=True)

ttk.Label(main_frame, text="分子：", font=("Microsoft YaHei", 11)).grid(row=0, column=0, sticky="w", pady=8)
entry_num = ttk.Entry(main_frame, width=16, font=("Microsoft YaHei", 11))
entry_num.grid(row=0, column=1, padx=12)

ttk.Label(main_frame, text="分母：", font=("Microsoft YaHei", 11)).grid(row=1, column=0, sticky="w", pady=8)
entry_den = ttk.Entry(main_frame, width=16, font=("Microsoft YaHei", 11))
entry_den.grid(row=1, column=1, padx=12)

btn_calc = ttk.Button(main_frame, text="开始约分", command=reduce_fraction)
btn_calc.grid(row=2, column=0, columnspan=2, pady=12)

label_result = ttk.Label(main_frame, text="等待计算...", font=("Microsoft YaHei", 12), foreground="#2255bb")
label_result.grid(row=3, column=0, columnspan=2)

root.mainloop()