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

Kivy切换屏幕时报错ObjectProperty无manager1属性该如何解决?

问题解决方法

错误原因

你触发报错的核心原因有3个:

  • 定义在My2App类中的ObjectProperty是实例属性,你直接用类名My2App访问拿到的是属性定义本身,不是运行时绑定的实例对象,自然不存在manager1属性
  • kv文件的属性绑定逻辑写反,没有把kv中定义的id控件绑定到App实例的对应属性上
  • 切换屏幕不需要绕App获取ScreenManager,Screen组件自带manager属性可以直接获取父级ScreenManager实例

修正步骤

1. 修正kv文件绑定逻辑

删除多余的自绑定属性,保留id即可:

ScreenManager:
    id:manager1

    First_Screen:
        id:first
    Show_Title:
        id:second

<First_Screen>:
    name:'start'
    # 其余内容.....

2. 修正App类的属性绑定

在kv加载完成后手动把id对应的实例赋值给App的ObjectProperty:

class My2App(MDApp):
    manager1 = ObjectProperty(None)
    first = ObjectProperty(None)
    second = ObjectProperty(None)
        
    def build(self):
        self.bd = Builder.load_file("My.kv")
        # 绑定kv内控件到App属性
        self.manager1 = self.bd.ids.manager1
        self.first = self.bd.ids.first
        self.second = self.bd.ids.second
        return self.bd

3. 修正切换屏幕的代码

如果是在First_Screen类内部写切换逻辑,推荐直接用自带的manager属性,写法最简单:

# First_Screen类内的代码
self.manager.current = "start"

如果需要通过App实例访问,要先获取当前运行的App实例,不能直接用类名访问:

from kivymd.app import MDApp

# First_Screen类内的代码
app = MDApp.get_running_app()
app.manager1.current = "start"

内容的提问来源于stack exchange,提问作者sam prgrammer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:39:03