import tkinter as tk
from tkinter import ttk

# 单位换算基准：统一转换成米作为中间量
unit_rate = {
    "千米(km)": 1000,
    "米(m)": 1,
    "分米(dm)": 0.1,
    "厘米(cm)": 0.01,
    "毫米(mm)": 0.001,
    "英里(mi)": 1609.344,
    "码(yd)": 0.9144,
    "英尺(ft)": 0.3048,
    "英寸(in)": 0.0254
}
unit_list = list(unit_rate.keys())

def convert():
    """转换计算函数"""
    try:
        num = float(entry_input.get())
        from_unit = combo_from.get()
        to_unit = combo_to.get()
        # 先转为米
        meter = num * unit_rate[from_unit]
        # 再转为目标单位
        result = meter / unit_rate[to_unit]
        label_result.config(text=f"结果：{result:.4f} {to_unit}")
    except ValueError:
        label_result.config(text="请输入有效的数字！")

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

# 输入框
tk.Label(root, text="输入数值：", font=("微软雅黑",11)).pack(pady=6)
entry_input = tk.Entry(root, font=("微软雅黑",12), width=22)
entry_input.pack()

# 来源单位
frame1 = tk.Frame(root)
frame1.pack(pady=8)
tk.Label(frame1, text="从：", font=("微软雅黑",11)).grid(row=0,column=0,padx=5)
combo_from = ttk.Combobox(frame1, values=unit_list, width=14, font=("微软雅黑",10))
combo_from.grid(row=0,column=1,padx=8)
combo_from.current(1)  # 默认选中米(m)

# 目标单位
frame2 = tk.Frame(root)
frame2.pack(pady=4)
tk.Label(frame2, text="转换到：", font=("微软雅黑",11)).grid(row=0,column=0,padx=5)
combo_to = ttk.Combobox(frame2, values=unit_list, width=14, font=("微软雅黑",10))
combo_to.grid(row=0,column=1,padx=8)
combo_to.current(3)  # 默认厘米(cm)

# 转换按钮
btn_convert = tk.Button(root, text="开始转换", command=convert,
                        font=("微软雅黑",11), bg="#3498db", fg="white")
btn_convert.pack(pady=12)

# 结果展示
label_result = tk.Label(root, text="结果：", font=("微软雅黑",12,"bold"), fg="#2c3e50")
label_result.pack()

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