import tkinter as tk
from tkinter import ttk, messagebox

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

def convert_weight():
    """转换计算逻辑"""
    try:
        input_num = float(entry_input.get())
        from_unit = combo_from.get()
        to_unit = combo_to.get()
        # 转为克，再转为目标单位
        gram_value = input_num * unit_to_gram[from_unit]
        result = gram_value / unit_to_gram[to_unit]
        # 显示结果保留6位小数
        label_result.config(text=f"转换结果：{result:.6f}")
    except ValueError:
        messagebox.showerror("输入错误", "请输入合法的数字！")
        entry_input.delete(0, tk.END)
        label_result.config(text="转换结果：--")

def clear_all():
    """清空输入与结果"""
    entry_input.delete(0, tk.END)
    label_result.config(text="转换结果：--")

# 主窗口配置
root = tk.Tk()
root.title("重量单位转换器")
root.geometry("420x260")  # 窗口大小
root.resizable(False, False)  # 禁止缩放窗口

# 整体居中布局，增加内边距
main_frame = ttk.Frame(root, padding=30)
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, font=("微软雅黑", 11), width=18)
entry_input.grid(row=0, column=1, padx=12, pady=8)

# 原单位选择
ttk.Label(main_frame, text="原始单位：", font=("微软雅黑", 11)).grid(row=1, column=0, sticky="w", pady=8)
combo_from = ttk.Combobox(main_frame, values=unit_list, state="readonly", font=("微软雅黑", 10), width=16)
combo_from.current(1)  # 默认选中千克
combo_from.grid(row=1, column=1, padx=12, pady=8)

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

# 按钮行（转换 + 清空）
btn_frame = ttk.Frame(main_frame)
btn_frame.grid(row=3, column=0, columnspan=2, pady=12)

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

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

# 结果展示
label_result = ttk.Label(main_frame, text="转换结果：--", font=("微软雅黑", 12, "bold"), foreground="#2266cc")
label_result.grid(row=4, column=0, columnspan=2, pady=8)

# 启动窗口循环
root.mainloop()