import tkinter as tk
from tkinter import ttk

# 单位字典放到全局，解决找不到变量报错
unit_gram = {
    "吨(t)": 1000000,
    "千克(kg)": 1000,
    "克(g)": 1,
    "毫克(mg)": 0.001,
    "斤": 500,
    "两": 50,
    "磅(lb)": 453.59237,
    "盎司(oz)": 28.3495
}

def weight_convert():
    try:
        num = float(entry_input.get())
        old_unit = combo_old.get()
        new_unit = combo_new.get()
        # 转为克
        total_g = num * unit_gram[old_unit]
        # 转为目标单位
        res = total_g / unit_gram[new_unit]
        label_res.config(text=f"换算结果：{res:.4f}")
    except ValueError:
        label_res.config(text="错误：请输入纯数字")
    except KeyError:
        label_res.config(text="错误：请在下拉框选择单位")

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

# 获取单位列表
unit_list = list(unit_gram.keys())

# 输入数值
tk.Label(root, text="输入数值：", font=("微软雅黑", 11), bg="#f7f7f7").place(x=30, y=25)
entry_input = tk.Entry(root, font=("微软雅黑", 11), width=16)
entry_input.place(x=110, y=25)

# 原有单位
tk.Label(root, text="原单位：", font=("微软雅黑", 11), bg="#f7f7f7").place(x=30, y=70)
combo_old = ttk.Combobox(root, values=unit_list, width=14, font=("微软雅黑", 10))
combo_old.current(1)  # 默认kg
combo_old.place(x=110, y=70)

# 目标单位
tk.Label(root, text="转换为：", font=("微软雅黑", 11), bg="#f7f7f7").place(x=255, y=70)
combo_new = ttk.Combobox(root, values=unit_list, width=14, font=("微软雅黑", 10))
combo_new.current(4)  # 默认斤
combo_new.place(x=330, y=70)

# 转换按钮
btn_convert = tk.Button(
    root, text="计算转换", command=weight_convert,
    font=("微软雅黑", 11), bg="#2E86AB", fg="white"
)
btn_convert.place(x=170, y=115, width=130, height=32)

# 结果标签
label_res = tk.Label(root, text="换算结果：", font=("微软雅黑", 13, "bold"), bg="#f7f7f7")
label_res.place(x=30, y=170)

root.mainloop()