Python Tkinter温度转换器报错'OptionMenu'无get属性求助
错误原因
- 变量覆盖问题:你对
Input_Value和Output_Value两个变量先被赋值为存储下拉选项的StringVar对象,在创建OptionMenu组件时,又将组件本身赋值给了同名变量,直接覆盖了原有的StringVar对象。后续调用.get()时实际是在OptionMenu组件对象上调用,该对象确实没有get方法,直接触发报错。 - 方法调用语法错误:所有获取下拉选项值的位置,你都写成了
Input_Value.get、Output_Value.get,缺少方法调用必须的括号,正确写法为Input_Value.get()。 - 附加问题:原有温度转换公式全部错误,且未将输入的字符串格式温度值转换为数值类型,无法直接参与计算。
修复方案
- 给
OptionMenu组件单独命名,不与存储值的StringVar变量重名 - 补全所有
get方法的调用括号 - 修正各温度转换公式,将输入值转换为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
相关产品推荐
相关产品推荐

