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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:35:28