import tkinter as tk
from tkinter import messagebox
import math

# 约分计算函数
def reduce_fraction():
    try:
        # 获取输入内容
        numerator_str = entry_num.get().strip()
        denominator_str = entry_den.get().strip()

        if not numerator_str or not denominator_str:
            messagebox.showwarning("提示", "分子和分母不能为空！")
            return

        numerator = int(numerator_str)
        denominator = int(denominator_str)

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

        # 计算最大公约数
        gcd_val = math.gcd(abs(numerator), abs(denominator))
        simple_num = numerator // gcd_val
        simple_den = denominator // gcd_val

        # 展示结果
        label_gcd.config(text=f"最大公约数(GCD)：{gcd_val}")
        label_origin.config(text=f"原始分数：{numerator}/{denominator}")
        label_result.config(text=f"最简分数：{simple_num}/{simple_den}")

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

# 清空输入框与结果
def clear_all():
    entry_num.delete(0, tk.END)
    entry_den.delete(0, tk.END)
    label_gcd.config(text="最大公约数(GCD)：--")
    label_origin.config(text="原始分数：--")
    label_result.config(text="最简分数：--")

# ---------------------- 界面搭建 ----------------------
root = tk.Tk()
root.title("分数约分化简工具")
root.geometry("420x280")  # 窗口大小
root.resizable(False, False)  # 禁止缩放窗口

# 整体内边距
main_frame = tk.Frame(root, padx=20, pady=20)
main_frame.pack(fill=tk.BOTH, expand=True)

# 第一行：分子输入
tk.Label(main_frame, text="分子：", font=("微软雅黑", 12)).grid(row=0, column=0, sticky="w", pady=8)
entry_num = tk.Entry(main_frame, font=("微软雅黑", 12), width=18)
entry_num.grid(row=0, column=1, padx=10)

# 第二行：分母输入
tk.Label(main_frame, text="分母：", font=("微软雅黑", 12)).grid(row=1, column=0, sticky="w", pady=8)
entry_den = tk.Entry(main_frame, font=("微软雅黑", 12), width=18)
entry_den.grid(row=1, column=1, padx=10)

# 按钮区域
btn_frame = tk.Frame(main_frame)
btn_frame.grid(row=2, column=0, columnspan=2, pady=12)

btn_calc = tk.Button(btn_frame, text="开始约分", command=reduce_fraction,
                     font=("微软雅黑", 11), bg="#409EFF", fg="white", width=10)
btn_calc.pack(side=tk.LEFT, padx=8)

btn_clear = tk.Button(btn_frame, text="清空重置", command=clear_all,
                      font=("微软雅黑", 11), bg="#F56C6C", fg="white", width=10)
btn_clear.pack(side=tk.LEFT)

# 结果展示区域
label_gcd = tk.Label(main_frame, text="最大公约数(GCD)：--", font=("微软雅黑", 11), fg="#222222")
label_gcd.grid(row=3, column=0, columnspan=2, sticky="w", pady=4)

label_origin = tk.Label(main_frame, text="原始分数：--", font=("微软雅黑", 11), fg="#222222")
label_origin.grid(row=4, column=0, columnspan=2, sticky="w", pady=4)

label_result = tk.Label(main_frame, text="最简分数：--", font=("微软雅黑", 12, "bold"), fg="#0066cc")
label_result.grid(row=5, column=0, columnspan=2, sticky="w", pady=8)

# 窗口主循环
root.mainloop()