import tkinter as tk
from tkinter import ttk

# 重量换算基准：全部换算为克中转
weight_unit = {
    "吨(t)": 1000000,
    "千克(kg)": 1000,
    "克(g)": 1,
    "斤": 500,
    "两": 50,
    "磅(lb)": 453.59237,
    "盎司(oz)": 28.34952
}
unit_list = list(weight_unit.keys())

def calculate():
    """换算核心逻辑"""
    try:
        num = float(entry_input.get())
    except ValueError:
        label_result.config(text="请输入合法数字！", fg="red")
        return
    # 获取选中单位
    unit_in = combo_in.get()
    unit_out = combo_out.get()
    # 转成克，再转目标单位
    gram_total = num * weight_unit[unit_in]
    res = gram_total / weight_unit[unit_out]
    label_result.config(text=f"换算结果：{res:.4f} {unit_out}", fg="#000000")

def clear_all():
    """清空输入输出"""
    entry_input.delete(0, tk.END)
    label_result.config(text="换算结果：", fg="black")

# 主窗口
root = tk.Tk()
root.title("重量单位转换器")
root.geometry("480x260")
root.resizable(False, False)

# 整体边距框架
main_frame = ttk.Frame(root, padding=20)
main_frame.pack(fill=tk.BOTH, expand=True)

# 第一行：输入数值
ttk.Label(main_frame, text="输入重量数值：", font=("微软雅黑", 11)).grid(row=0, column=0, sticky="w")
entry_input = ttk.Entry(main_frame, font=("微软雅黑", 11), width=22)
entry_input.grid(row=0, column=1, padx=12)

# 第二行：原单位 + 目标单位
ttk.Label(main_frame, text="原始单位：", font=("微软雅黑", 11)).grid(row=1, column=0, sticky="w", pady=15)
combo_in = ttk.Combobox(main_frame, values=unit_list, width=12, font=("微软雅黑", 10))
combo_in.current(1)  # 默认选中千克
combo_in.grid(row=1, column=1, padx=12)

ttk.Label(main_frame, text="转换为：", font=("微软雅黑", 11)).grid(row=2, column=0, sticky="w")
combo_out = ttk.Combobox(main_frame, values=unit_list, width=12, font=("微软雅黑", 10))
combo_out.current(3)  # 默认选中斤
combo_out.grid(row=2, column=1, padx=12)

# 按钮行
btn_frame = ttk.Frame(main_frame)
btn_frame.grid(row=3, column=0, columnspan=2, pady=18)

btn_convert = ttk.Button(btn_frame, text="开始换算", command=calculate)
btn_convert.pack(side=tk.LEFT, padx=10)

btn_clear = ttk.Button(btn_frame, text="清空", command=clear_all)
btn_clear.pack(side=tk.LEFT)

# 结果展示
label_result = tk.Label(main_frame, text="换算结果：", font=("微软雅黑", 12))
label_result.grid(row=4, column=0, columnspan=2)

root.mainloop()