import tkinter as tk
from tkinter import messagebox

# 长度换算基准：全部转为米作为中间单位
unit_dict = {
    "米(m)": 1.0,
    "厘米(cm)": 0.01,
    "毫米(mm)": 0.001,
    "英寸(in)": 0.0254,
    "英尺(ft)": 0.3048
}


def convert():
    """执行单位转换逻辑"""
    try:
        input_val = float(entry_input.get())
        from_unit = var_from.get()
        to_unit = var_to.get()

        # 先转成米，再转为目标单位
        meter = input_val * unit_dict[from_unit]
        result = meter / unit_dict[to_unit]
        var_result.set(f"{result:.4f}")
    except ValueError:
        messagebox.showerror("输入错误", "请输入有效的数字！")


def clear_all():
    """清空输入输出"""
    entry_input.delete(0, tk.END)
    var_result.set("")


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

var_from = tk.StringVar(value="米(m)")
var_to = tk.StringVar(value="厘米(cm)")
var_result = tk.StringVar()

unit_list = list(unit_dict.keys())

# 输入部分
label_input = tk.Label(root, text="输入数值：", font=("微软雅黑", 12))
label_input.place(x=40, y=35)
entry_input = tk.Entry(root, font=("微软雅黑", 12), width=14)
entry_input.place(x=130, y=35)

# 来源单位下拉框
label_from = tk.Label(root, text="源单位：", font=("微软雅黑", 12))
label_from.place(x=40, y=80)
combo_from = tk.OptionMenu(root, var_from, *unit_list)
combo_from.config(font=("微软雅黑",10), width=10)
combo_from.place(x=130, y=78)

# 目标单位下拉框
label_to = tk.Label(root, text="目标单位：", font=("微软雅黑", 12))
label_to.place(x=260, y=80)
combo_to = tk.OptionMenu(root, var_to, *unit_list)
combo_to.config(font=("微软雅黑",10), width=10)
combo_to.place(x=335, y=78)

# 结果输出
label_res = tk.Label(root, text="转换结果：", font=("微软雅黑", 12))
label_res.place(x=40, y=130)
entry_res = tk.Entry(root, textvariable=var_result, font=("微软雅黑",12), width=14, state="readonly")
entry_res.place(x=130, y=130)

# 按钮
btn_convert = tk.Button(root, text="开始转换", command=convert, font=("微软雅黑",11))
btn_convert.place(x=280, y=128)

btn_clear = tk.Button(root, text="清空", command=clear_all, font=("微软雅黑",10), bg="#eeeeee")
btn_clear.place(x=360, y=128)

#底部提示
tip = tk.Label(root, text="支持：米、厘米、毫米、英寸、英尺", fg="#555555", font=("微软雅黑",9))
tip.place(x=120, y=185)

root.mainloop()
