import tkinter as tk
from tkinter import ttk

# 单位换算基准（统一转为 米 计算）
unit_dict = {
    "米(m)": 1,
    "千米(km)": 1000,
    "厘米(cm)": 0.01,
    "毫米(mm)": 0.001,
    "英寸(in)": 0.0254,
    "英尺(ft)": 0.3048,
    "码(yd)": 0.9144
}

def convert():
    """长度转换核心函数"""
    try:
        # 获取输入数值
        num = float(entry_input.get())
        # 获取选中单位
        unit_in = combo_in.get()
        unit_out = combo_out.get()
        # 先转成米，再转目标单位
        meter = num * unit_dict[unit_in]
        result = meter / unit_dict[unit_out]
        # 输出结果（保留4位小数）
        label_result.config(text=f"转换结果：{result:.4f}")
    except ValueError:
        label_result.config(text="请输入有效数字！")

# 创建主窗口
root = tk.Tk()
root.title("长度单位转换器")
root.geometry("450x220")
root.resizable(False, False)

# 布局组件
# 输入区域
tk.Label(root, text="输入数值：", font=("Arial", 11)).place(x=30, y=30)
entry_input = tk.Entry(root, font=("Arial", 11), width=20)
entry_input.place(x=120, y=30)

# 原单位选择
tk.Label(root, text="原单位：", font=("Arial", 11)).place(x=30, y=80)
combo_in = ttk.Combobox(root, values=list(unit_dict.keys()), font=("Arial", 11), width=15)
combo_in.place(x=120, y=80)
combo_in.current(0)  # 默认选中第一个：米

# 目标单位选择
tk.Label(root, text="目标单位：", font=("Arial", 11)).place(x=250, y=80)
combo_out = ttk.Combobox(root, values=list(unit_dict.keys()), font=("Arial", 11), width=15)
combo_out.place(x=320, y=80)
combo_out.current(1)  # 默认选中第二个：千米

# 转换按钮
btn_convert = tk.Button(root, text="开始转换", command=convert, 
                        font=("Arial", 11), bg="#409EFF", fg="white", width=12)
btn_convert.place(x=180, y=130)

# 结果显示
label_result = tk.Label(root, text="转换结果：", font=("Arial", 12), fg="#E6A23C")
label_result.place(x=30, y=180)

# 运行窗口
root.mainloop()