import tkinter as tk
from tkinter import messagebox

# 辗转相除法求最大公约数
def gcd(a, b):
    a, b = abs(a), abs(b)
    while b != 0:
        a, b = b, a % b
    return a

def reduce_fraction():
    try:
        numerator = int(entry_num.get().strip())   # 分子
        denominator = int(entry_den.get().strip()) # 分母
    except ValueError:
        messagebox.showerror("输入错误", "请输入整数！")
        return

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

    common = gcd(numerator, denominator)
    sim_num = numerator // common
    sim_den = denominator // common

    # 统一负号放在分子
    if sim_den < 0:
        sim_num = -sim_num
        sim_den = -sim_den

    res_text = f"""原分数：{numerator}/{denominator}
最大公约数：{common}
约分后最简分数：{sim_num}/{sim_den}
小数形式：{sim_num / sim_den:.4f}"""

    result_label.config(text=res_text)

def clear_all():
    entry_num.delete(0, tk.END)
    entry_den.delete(0, tk.END)
    result_label.config(text="结果会显示在这里")

# 窗口搭建
root = tk.Tk()
root.title("分数约分化简工具")
root.geometry("450x280")
root.resizable(False, False)

# 输入区域
frame_in = tk.Frame(root, pady=20)
frame_in.pack()

tk.Label(frame_in, text="分子：", font=("SimHei", 12)).grid(row=0, column=0, padx=5)
entry_num = tk.Entry(frame_in, width=10, font=("SimHei", 12))
entry_num.grid(row=0, column=1, padx=5)

tk.Label(frame_in, text=" / ", font=("SimHei", 15)).grid(row=0, column=2)

tk.Label(frame_in, text="分母：", font=("SimHei", 12)).grid(row=0, column=3, padx=5)
entry_den = tk.Entry(frame_in, width=10, font=("SimHei", 12))
entry_den.grid(row=0, column=4, padx=5)

# 按钮区
frame_btn = tk.Frame(root)
frame_btn.pack(pady=5)

tk.Button(frame_btn, text="一键约分", command=reduce_fraction, width=10, font=("SimHei",11)).grid(row=0,column=0,padx=8)
tk.Button(frame_btn, text="清空", command=clear_all, width=8, font=("SimHei",11)).grid(row=0,column=1,padx=8)

# 结果展示
result_label = tk.Label(root, text="结果会显示在这里", font=("SimHei", 11), fg="#222")
result_label.pack(pady=20)

root.mainloop()