在MDApp中获取TextInput值遇AttributeError错误求助
解决Kivy中
self.root.ids访问报错AttributeError: 'super' object has no attribute '__getattr__' 可能的原因及解决方案:
检查KV文件的根组件结构
确保你的KV文件的根组件(如Screen、BoxLayout)是明确的容器,且utilizador是该容器的子组件,id定义正确。如果你的App根是ScreenManager,需要先获取目标Screen再访问ids:# 示例:如果root是ScreenManager username = self.root.get_screen('你的屏幕名称').ids.utilizador.text正确的KV结构示例:
<YourRootWidget>: TextInput: id: utilizador hint_text: "用户名" MDRaisedButton: text: "登录" on_press: app.login()确认App类的build方法返回正确的根组件
确保build()方法返回的是包含目标ids的Widget,且KV规则已正确加载:class PLASbritos(MDApp): def build(self): return YourRootWidget() # 或包含目标Screen的ScreenManager若使用
Builder.load_file()加载KV,需确保文件路径正确,且在build前完成加载。将登录逻辑移到对应Widget类中(最佳实践)
避免在App类中直接依赖root的ids,把login方法放到包含utilizador的Screen/Widget类中,直接通过self.ids访问:class MainScreen(Screen): def login(self): username = self.ids.utilizador.text # 处理登录逻辑 class PLASbritos(MDApp): def build(self): sm = ScreenManager() sm.add_widget(MainScreen(name='main')) return sm对应KV中按钮绑定改为:
MDRaisedButton: text: "登录" on_press: root.login()检查拼写与命名冲突
确认KV中的idutilizador和代码中的拼写完全一致(区分大小写),且没有重复id或root组件被错误覆盖的情况。
内容的提问来源于stack exchange,提问作者João Faria
相关产品推荐
相关产品推荐

