import tkinter as tk
from tkinter import ttk, messagebox

# 重量换算基准：以千克kg为中间单位
unit_rate = {
    "千克(kg)": 1,
    "克(g)": 1000,
    "吨(t)": 0.001,
    "斤": 2,        # 1kg = 2斤
    "磅(lb)": 2.20462
}

def convert_weight():
    """执行重量转换计算"""
    try:
        input_num = float(entry_input.get())
        from_unit = combo_from.get()
        to_unit = combo_to.get()

        # 先转为kg，再转为目标单位
        kg_value = input_num / unit_rate[from_unit]
        result = kg_value * unit_rate[to_unit]

        # 显示结果，保留4位小数
        var_result.set(f"{result:.4f}")
    except ValueError:
        messagebox.showerror("输入错误", "请输入合法的数字！")
        var_result.set("")

def clear_all():
    """清空输入框与结果"""
    entry_input.delete(0, tk.END)
    var_result.set("")

# 创建主窗口
root = tk.Tk()
root.title("重量单位转换器")
root.geometry("420x260")
root.resizable(False, False)  # 固定窗口大小

# 全局变量存储结果
var_result = tk.StringVar()

# 主容器居中布局
main_frame = ttk.Frame(root, padding=30)
main_frame.pack(fill=tk.BOTH, expand=True)

# 第一行：输入数值
ttk.Label(main_frame, text="输入数值：", font=("Microsoft YaHei", 11)).grid(row=0, column=0, sticky="w", pady=8)
entry_input = ttk.Entry(main_frame, font=("Microsoft YaHei", 11), width=22)
entry_input.grid(row=0, column=1, padx=10, pady=8)

# 第二行：原单位
ttk.Label(main_frame, text="转换自：", font=("Microsoft YaHei", 11)).grid(row=1, column=0, sticky="w", pady=8)
unit_list = list(unit_rate.keys())
combo_from = ttk.Combobox(main_frame, values=unit_list, state="readonly", font=("Microsoft YaHei", 11), width=20)
combo_from.current(0)  # 默认选中kg
combo_from.grid(row=1, column=1, padx=10, pady=8)

# 第三行：目标单位
ttk.Label(main_frame, text="转换至：", font=("Microsoft YaHei", 11)).grid(row=2, column=0, sticky="w", pady=8)
combo_to = ttk.Combobox(main_frame, values=unit_list, state="readonly", font=("Microsoft YaHei", 11), width=20)
combo_to.current(1)  # 默认选中克
combo_to.grid(row=2, column=1, padx=10, pady=8)

# 第四行：结果展示
ttk.Label(main_frame, text="转换结果：", font=("Microsoft YaHei", 11)).grid(row=3, column=0, sticky="w", pady=8)
label_result = ttk.Label(main_frame, textvariable=var_result, font=("Microsoft YaHei", 11, "bold"), foreground="#2266cc", width=20)
label_result.grid(row=3, column=1, padx=10, pady=8)

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

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

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

# 窗口循环运行
root.mainloop()