Tkinter登录跳转页面报错AttributeError:'LogInPage'无'_frame'属性
错误原因
你调用页面切换方法的逻辑错误:switch_frame是SampleApp类的实例方法,只能通过SampleApp的实例对象调用。你直接用类名SampleApp.switch_frame(self,InicialPage)调用时,方法内的self会被赋值为当前LogInPage的实例,而_frame属性只定义在SampleApp实例上,因此触发属性不存在的报错。
修复步骤
- 在
LogInPage的初始化方法中保存父窗口(即SampleApp实例)为实例属性 - 登录验证通过后,通过保存的父窗口实例调用
switch_frame方法 - 可选修复:错误提示的Label建议指定父组件为当前Frame,避免混布局导致的显示异常
修改后的代码片段
1. LogInPage初始化方法修改
class LogInPage(tk.Frame): user = 'asper' passw ='asper' def __init__(self, parent): tk.Frame.__init__(self, parent) self.parent = parent # 新增此行保存父窗口实例 # 后续原有canvas、输入框、按钮创建代码保持不变,注意对齐原有缩进
2. login_user方法修改
def login_user(self): '''验证输入的账号密码是否正确''' if self.entry_1.get() == self.user and self.entry_2.get() == self.passw: # 改用父窗口实例调用页面切换方法 self.parent.switch_frame(InicialPage) else: '''抛出账号密码错误的提示''' # 指定父组件为当前Frame,用place布局适配当前页面的布局逻辑 self.message = Label(self, text = '用户名或密码错误,请重试',fg = 'Red') self.message.place(x=503.0, y=330.0)
额外注意事项
原有代码中存在缩进对齐问题,比如LogInPage初始化方法内的self.canvas等代码的缩进层级低于def __init__,运行前请修正所有代码的缩进,保持同一代码块的缩进一致。
内容的提问来源于stack exchange,提问作者AlvaroSt
相关产品推荐
相关产品推荐

