KivyMD登录表单密码显示隐藏功能触发AttributeError问题求助
问题修复:KivyMD密码显示/隐藏功能的AttributeError错误
错误原因
你的代码中self.root指向的是ScreenManager,但password_login和password_text这两个控件属于LoginWindow这个MDScreen的内部元素,ScreenManager的ids字典中不存在这些控件,因此触发KeyError,进而导致AttributeError。
修复方案(两种可选)
方案一:在App类中获取登录页面实例后操作控件
修改password类中的show_password方法,先通过ScreenManager获取LoginWindow实例,再访问其内部控件:
def show_password(self, checkbox, value): # 获取登录页面实例 login_screen = self.root.get_screen('login') if value: login_screen.ids.password_login.password = False login_screen.ids.password_text.text = 'Hide password' else: login_screen.ids.password_login.password = True login_screen.ids.password_text.text = 'Show password'
方案二:将逻辑移至LoginWindow类(更推荐)
把密码显示/隐藏的逻辑放到LoginWindow类中,直接访问当前页面的ids,同时修改kv文件中的事件绑定:
- 修改
LoginWindow类:
class LoginWindow(MDScreen): def show_password(self, checkbox, value): if value: self.ids.password_login.password = False self.ids.password_text.text = 'Hide password' else: self.ids.password_login.password = True self.ids.password_text.text = 'Show password'
- 修改kv文件中MDCheckbox的
on_active绑定:
MDCheckbox: size_hint: None, None size: '48dp', '48dp' pos_hint: {'center_x': 0.18,'center_y': 0.15} on_active: root.show_password(*args) # 将app改为root
验证效果
修改完成后运行代码,勾选复选框时密码会显示明文,标签变为"Hide password";取消勾选则恢复密文,标签变回"Show password",错误不再触发。
内容的提问来源于stack exchange,提问作者Loh Boon How
相关产品推荐
相关产品推荐

