import tkinter as tk
from tkinter import messagebox
import math

# 约分核心函数
def reduce_fraction():
    # 获取输入
    num_text = entry_num.get().strip()
    den_text = entry_den.get().strip()

    # 判空
    if not num_text or not den_text:
        messagebox.showwarning("提示", "分子和分母都不能为空！")
        return
    # 判断是否纯数字
    if not num_text.isdigit() or not den_text.isdigit():
        messagebox.showerror("输入错误", "请输入正整数！不能输入小数/字母")
        return

    numerator = int(num_text)
    denominator = int(den_text)

    if denominator == 0:
        messagebox.showerror("错误", "分母不能为0！")
        return
    if numerator == 0:
        result_text.delete(1.0, tk.END)
        result_text.insert(tk.END, f"原始分数：0/{denominator}\n最简分数：0")
        return

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

    # 计算带分数
    if simple_num > simple_den:
        integer_part = simple_num // simple_den
        remain = simple_num % simple_den
        if remain == 0:
            mixed_str = f"{integer_part}"
        else:
            mixed_str = f"{integer_part}又{remain}/{simple_den}"
    else:
        mixed_str = "真分数，无整数部分"

    # 输出全部信息
    info = f"===== 分数化简结果 =====\n"
    info += f"原始分数：{numerator}/{denominator}\n"
    info += f"最大公约数：{gcd_val}\n"
    info += f"最简分数：{simple_num}/{simple_den}\n"
    info += f"带分数形式：{mixed_str}"

    result_text.delete(1.0, tk.END)
    result_text.insert(tk.END, info)

# 清空输入与结果
def clear_all():
    entry_num.delete(0, tk.END)
    entry_den.delete(0, tk.END)
    result_text.delete(1.0, tk.END)

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

# 输入区域
frame_input = tk.Frame(root, pady=12)
frame_input.pack()

tk.Label(frame_input, text="分子：", font=("微软雅黑", 12)).grid(row=0, column=0, padx=6)
entry_num = tk.Entry(frame_input, width=10, font=("微软雅黑", 12))
entry_num.grid(row=0, column=1, padx=8)

tk.Label(frame_input, text="分母：", font=("微软雅黑", 12)).grid(row=0, column=2, padx=6)
entry_den = tk.Entry(frame_input, width=10, font=("微软雅黑", 12))
entry_den.grid(row=0, column=3, padx=8)

# 按钮区域
frame_btn = tk.Frame(root, pady=8)
frame_btn.pack()
tk.Button(frame_btn, text="一键约分", width=12, font=("微软雅黑", 10), command=reduce_fraction).grid(row=0, column=0, padx=10)
tk.Button(frame_btn, text="清空", width=12, font=("微软雅黑", 10), command=clear_all).grid(row=0, column=1, padx=10)

# 结果展示区
tk.Label(root, text="计算结果", font=("微软雅黑", 12, "bold")).pack()
result_text = tk.Text(root, width=52, height=12, font=("微软雅黑", 11))
result_text.pack(pady=6)

root.mainloop()