CustomTkinter Entry组件get方法调用报错AttributeError求助
问题解决:CustomTkinter获取Entry内容时的AttributeError错误
错误原因分析
你的代码存在两个核心问题:
get_db方法定义在了__init__函数内部,属于局部函数,并非App类的成员方法,因此类实例无法调用它,导致AttributeError。entry_db是__init__内的局部变量,没有用self.声明为类实例属性,get_db方法无法通过self.entry_db访问到这个输入框。
修正后的代码
import customtkinter # 假设DPadY和DPadX是你定义的常量,这里给出示例值 DPadY = 10 DPadX = 10 class App(customtkinter.CTk): def __init__(self): super().__init__() self.geometry("500x300") self.title("Psychrometrics") customtkinter.set_appearance_mode("system") customtkinter.set_default_color_theme("green") label_title = customtkinter.CTkLabel(self, text="Saturation Pressure") label_title.grid(row=0, column=0, pady=DPadY, padx=DPadX) # 用self.声明为实例属性,让类内其他方法可访问 self.entry_db = customtkinter.CTkEntry(self, placeholder_text="Dry Bulb") self.entry_db.grid(row=1, column=0, pady=DPadY, padx=DPadX) label_dbsp = customtkinter.CTkEntry(self, width=300, placeholder_text="Dry Bulb Saturation Pressure") label_dbsp.grid(row=1, column=1, pady=DPadY, padx=DPadX) self.entry_wb = customtkinter.CTkEntry(self, placeholder_text="Wet Bulb") self.entry_wb.grid(row=2, column=0, pady=DPadY, padx=DPadX) label_wbsp = customtkinter.CTkEntry(self, width=300, placeholder_text="Wet Bulb Saturation Pressure") label_wbsp.grid(row=2, column=1, pady=DPadY, padx=DPadX) # 将按钮命令绑定为类内方法,避免全局函数耦合 button = customtkinter.CTkButton(self, text="Calculate", command=self.login) button.grid(row=3, column=0, pady=DPadY, padx=DPadX) # 将get_db定义为类的成员方法,移出__init__ def get_db(self): _Db = self.entry_db.get() return _Db # 将login改为类内方法,直接调用get_db def login(self): Cdb = self.get_db() print(Cdb) app = App() app.mainloop()
关键修改点
- 将
get_db方法移到__init__外部,作为App类的成员方法。 - 给
entry_db添加self.前缀,使其成为类实例属性,确保get_db能访问到输入框。 - 将按钮的
command绑定为类内的self.login方法,避免全局函数依赖全局变量app,代码结构更清晰。
内容的提问来源于stack exchange,提问作者Paul Dresser
相关产品推荐
相关产品推荐

