You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Tkinter温度转换器报错'OptionMenu'无get属性求助

错误原因
  • 变量覆盖问题:你对Input_Value和Output_Value两个变量先被赋值为存储下拉选项的StringVar对象,在创建OptionMenu组件时,又将组件本身赋值给了同名变量,直接覆盖了原有的StringVar对象。后续调用.get()时实际是在OptionMenu组件对象上调用,该对象确实没有get方法,直接触发报错。
  • 方法调用语法错误:所有获取下拉选项值的位置,你都写成了Input_Value.get、Output_Value.get,缺少方法调用必须的括号,正确写法为Input_Value.get()。
  • 附加问题:原有温度转换公式全部错误,且未将输入的字符串格式温度值转换为数值类型,无法直接参与计算。
修复方案
  1. 给OptionMenu组件单独命名,不与存储值的StringVar变量重名
  2. 补全所有get方法的调用括号
  3. 修正各温度转换公式,将输入值转换为float类型,增加非法输入校验避免程序健壮性
修复后完整代码
from tkinter import *
from PIL import ImageTk, Image

# Dropdown menu options
Temp_Options = ["Celsius", "Fahrenheit", "Kelvin"]

root = Tk()
root.title("The World's Best Temperature Converter")
root.geometry("575x250")
root.eval('tk::PlaceWindow . center')


# Checks what units were input
def Check_Input():
    input_unit = Input_Value.get()
    print(input_unit)
    if input_unit == "Celsius":
        print("Input Recieved = Celsius")
        Celsius()
    elif input_unit == "Fahrenheit":
        print("Input Recieved = Fahrenheit")
        Fahrenheit()
    elif input_unit == "Kelvin":
        Kelvin()
        print("Input Recieved = Kelvin")
    else:
        print("Check Input Failed")


# Convert FROM Celsius
def Celsius():
    try:
        Temp = float(User_Input.get())
    except ValueError:
        Final_Answer = Label(root, text="请输入有效数字")
        Final_Answer.grid(row=3, column=1)
        return
    output_unit = Output_Value.get()
    if output_unit == "Celsius":
        Answer = Temp
    elif output_unit == "Fahrenheit":
        Answer = round((Temp * 9/5) + 32, 2)
    elif output_unit == "Kelvin":
        Answer = round(Temp + 273.15, 2)
    Final_Answer = Label(root, text=Answer)
    Final_Answer.grid(row=3, column=1)


# Convert FROM Fahrenheit
def Fahrenheit():
    try:
        Temp = float(User_Input.get())
    except ValueError:
        Final_Answer = Label(root, text="请输入有效数字")
        Final_Answer.grid(row=3, column=1)
        return
    output_unit = Output_Value.get()
    if output_unit == "Celsius":
        Answer = round((Temp - 32) * 5/9, 2)
    elif output_unit == "Fahrenheit":
        Answer = Temp
    elif output_unit == "Kelvin":
        Answer = round((Temp - 32) * 5/9 + 273.15, 2)
    Final_Answer = Label(root, text=Answer)
    Final_Answer.grid(row=3, column=1)


# Convert FROM Kelvin
def Kelvin():
    try:
        Temp = float(User_Input.get())
    except ValueError:
        Final_Answer = Label(root, text="请输入有效数字")
        Final_Answer.grid(row=3, column=1)
        return
    output_unit = Output_Value.get()
    if output_unit == "Celsius":
        Answer = round(Temp - 273.15, 2)
    elif output_unit == "Fahrenheit":
        Answer = round((Temp - 273.15) * 9/5 + 32, 2)
    elif output_unit == "Kelvin":
        Answer = Temp
    Final_Answer = Label(root, text=Answer)
    Final_Answer.grid(row=3, column=1)


# Choose Default for Input options
Input_Value = StringVar(root)
Input_Value.set("Select Input")

# Input Options Menu
Input_OptionMenu = OptionMenu(
    root, Input_Value, *Temp_Options)
Input_OptionMenu.config(width=9)
Input_OptionMenu.grid(row=1, column=0)


# Chose Default for Output Options
Output_Value = StringVar(root)
Output_Value.set("Select Output")

# Output options menu
Output_OptionMenu = OptionMenu(
    root, Output_Value, *Temp_Options)
Output_OptionMenu.config(width=9)
Output_OptionMenu.grid(row=1, column=2)


# Text Input Box
User_Input = Entry(root, width=50, borderwidth=10)
User_Input.grid(row=1, column=1)


# Button
Convert = Button(root, text="Convert", command=Check_Input)
Convert.grid(row=1, column=3)


root.mainloop()

内容的提问来源于stack exchange,提问作者Davis Stanko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 19:54:04