import tkinter as tk
from tkinter import ttk, messagebox

# 重量换算基准：统一以千克kg为中间单位
weight_rate = {
    "吨(t)": 1000,
    "千克(kg)": 1,
    "克(g)": 0.001,
    "斤": 0.5,
    "两": 0.05,
    "磅(lb)": 0.45359237,
    "盎司(oz)": 0.02834952
}

def convert_weight():
    """执行重量转换计算"""
    try:
        input_num = float(entry_input.get())
        unit_from = combo_from.get()
        unit_to = combo_to.get()
        # 先转为kg，再转为目标单位
        kg_value = input_num * weight_rate[unit_from]
        result = kg_value / weight_rate[unit_to]
        # 显示结果保留6位小数
        entry_result.delete(0, tk.END)
        entry_result.insert(0, f"{result:.6f}")
    except ValueError:
        messagebox.showerror("输入错误", "请输入合法的数字！")
    except KeyError:
        messagebox.showerror("单位错误", "请选择正确的转换单位")

def clear_all():
    """清空输入输出框"""
    entry_input.delete(0, tk.END)
    entry_result.delete(0, tk.END)

# 主窗口配置
root = tk.Tk()
root.title("重量单位转换器")
root.geometry("420x220")
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", pady=8)
entry_input = ttk.Entry(main_frame, width=18, font=("微软雅黑", 11))
entry_input.grid(row=0, column=1, padx=10)

ttk.Label(main_frame, text="转换自：", font=("微软雅黑", 11)).grid(row=1, column=0, sticky="w", pady=8)
combo_from = ttk.Combobox(main_frame, values=list(weight_rate.keys()), width=16, font=("微软雅黑", 10), state="readonly")
combo_from.current(1)  # 默认选中kg
combo_from.grid(row=1, column=1, padx=10)

ttk.Label(main_frame, text="转换至：", font=("微软雅黑", 11)).grid(row=2, column=0, sticky="w", pady=8)
combo_to = ttk.Combobox(main_frame, values=list(weight_rate.keys()), width=16, font=("微软雅黑", 10), state="readonly")
combo_to.current(3)  # 默认选中斤
combo_to.grid(row=2, column=1, padx=10)

# 结果展示
ttk.Label(main_frame, text="转换结果：", font=("微软雅黑", 11)).grid(row=3, column=0, sticky="w", pady=8)
entry_result = ttk.Entry(main_frame, width=18, font=("微软雅黑", 11), state="readonly")
entry_result.grid(row=3, column=1, padx=10)

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

btn_convert = ttk.Button(btn_frame, text="开始转换", command=convert_weight, width=10)
btn_convert.pack(side=tk.LEFT, padx=15)

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

# 窗口主循环
root.mainloop()