import tkinter as tk
from tkinter import ttk

# 换算基准：全部转为米
unit_rate = {
    "米(m)": 1,
    "千米(km)": 1000,
    "厘米(cm)": 0.01,
    "毫米(mm)": 0.001,
    "英寸(in)": 0.0254,
    "英尺(ft)": 0.3048,
    "码(yd)": 0.9144,
    "英里(mi)": 1609.34
}

def convert():
    try:
        num = float(entry_input.get())
        from_u = combo_from.get()
        to_u = combo_to.get()
        # 先转成米
        meters = num * unit_rate[from_u]
        # 再转目标单位
        result = meters / unit_rate[to_u]
        var_result.set(f"{result:.4f}")
    except ValueError:
        var_result.set("请输入有效数字")

# 创建窗口
win = tk.Tk()
win.title("长度单位转换器")
win.geometry("420x220")

# 输入
tk.Label(win, text="输入数值：", font=("SimHei",12)).grid(row=0, column=0, padx=10, pady=15)
entry_input = tk.Entry(win, font=("SimHei",12), width=15)
entry_input.grid(row=0, column=1)

# 来源单位
tk.Label(win, text="原单位：", font=("SimHei",12)).grid(row=1, column=0, padx=10, pady=5)
combo_from = ttk.Combobox(win, values=list(unit_rate.keys()), font=("SimHei",12), width=13)
combo_from.current(0)
combo_from.grid(row=1, column=1)

# 目标单位
tk.Label(win, text="转换到：", font=("SimHei",12)).grid(row=2, column=0, padx=10, pady=5)
combo_to = ttk.Combobox(win, values=list(unit_rate.keys()), font=("SimHei",12), width=13)
combo_to.current(2)
combo_to.grid(row=2, column=1)

# 转换按钮
btn = tk.Button(win, text="开始转换", command=convert, font=("SimHei",12), bg="#4096ee", fg="white")
btn.grid(row=3, column=0, padx=10, pady=10)

# 结果输出
var_result = tk.StringVar()
tk.Label(win, text="结果：", font=("SimHei",12)).grid(row=3, column=1)
tk.Label(win, textvariable=var_result, font=("SimHei",14), fg="red").grid(row=3, column=2)

win.mainloop()
