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

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文件中的事件绑定:

  1. 修改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'
  1. 修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:50:26