import tkinter as tk
from tkinter import messagebox

# 求最大公约数
def get_gcd(a, b):
    a, b = abs(a), abs(b)
    while b != 0:
        a, b = b, a % b
    return a

# 分数化简逻辑
def calc_fraction():
    try:
        top = int(entry_top.get())
        bot = int(entry_bot.get())
        if bot == 0:
            messagebox.showerror("输入错误", "分母不能为0！")
            res_top.config(text="--")
            res_bot.config(text="--")
            return
        g = get_gcd(top, bot)
        new_t = top // g
        new_b = bot // g
        # 负号放分子
        if new_b < 0:
            new_t = -new_t
            new_b = -new_b
        res_top.config(text=str(new_t))
        res_bot.config(text=str(new_b))
    except ValueError:
        messagebox.showerror("输入错误", "请输入整数！")
        res_top.config(text="--")
        res_bot.config(text="--")

# 清空输入
def clear_all():
    entry_top.delete(0, tk.END)
    entry_bot.delete(0, tk.END)
    res_top.config(text="--")
    res_bot.config(text="--")

# ========== 窗口美化配置 ==========
root = tk.Tk()
root.title("精美分数化简计算器")
root.geometry("520x380")
root.resizable(False, False)
root.configure(bg="#f0f6ff")

# 标题
title_label = tk.Label(root, text="📐 分数最简化简工具", font=("微软雅黑", 20, "bold"), bg="#2563eb", fg="white", padx=20, pady=8)
title_label.pack(fill=tk.X, pady=(15,20))

# 输入框架
frame_in = tk.Frame(root, bg="#e6f0ff", bd=2, relief=tk.GROOVE, padx=20, pady=15)
frame_in.pack(padx=30)

tk.Label(frame_in, text="分子：", font=("微软雅黑",13), bg="#e6f0ff").grid(row=0,column=0,pady=6)
entry_top = tk.Entry(frame_in, width=10, font=("微软雅黑",15), justify="center", bd=2)
entry_top.grid(row=0,column=1,padx=12)

tk.Label(frame_in, text="分母：", font=("微软雅黑",13), bg="#e6f0ff").grid(row=0,column=2,pady=6)
entry_bot = tk.Entry(frame_in, width=10, font=("微软雅黑",15), justify="center", bd=2)
entry_bot.grid(row=0,column=3,padx=12)

# 按钮区
frame_btn = tk.Frame(root, bg="#f0f6ff")
frame_btn.pack(pady=18)

btn_calc = tk.Button(frame_btn, text="开始化简", command=calc_fraction, font=("微软雅黑",12,"bold"),
                     bg="#16a34a", fg="white", width=10, relief=tk.RAISED)
btn_calc.grid(row=0,column=0,padx=10)

btn_clr = tk.Button(frame_btn, text="清空重置", command=clear_all, font=("微软雅黑",12,"bold"),
                    bg="#dc2626", fg="white", width=10, relief=tk.RAISED)
btn_clr.grid(row=0,column=1,padx=10)

# 结果展示框（竖式分数）
frame_out = tk.Frame(root, bg="#fff", bd=3, relief=tk.GROOVE, padx=35, pady=12)
frame_out.pack()
tk.Label(frame_out,text="化简结果：",font=("微软雅黑",13),bg="#fff").grid(row=0,column=0)

res_top = tk.Label(frame_out,text="--",font=("微软雅黑",22,"bold"),bg="#fff",fg="#2563eb")
res_top.grid(row=0,column=1,pady=0)
tk.Label(frame_out,text="——",font=("微软雅黑",22),bg="#fff").grid(row=1,column=1)
res_bot = tk.Label(frame_out,text="--",font=("微软雅黑",22,"bold"),bg="#fff",fg="#2563eb")
res_bot.grid(row=2,column=1,pady=0)

root.mainloop()