Kivy开发报错:OnePlayer对象已定义gago方法仍提示无该属性
报错根本原因
报错是由代码执行顺序错误导致的:
你在代码中先执行Builder.load_string(oneplayer)加载KV规则,这行代码运行时,Python解释器还没有执行到后续OnePlayer类的定义逻辑。Kivy解析KV中<OnePlayer>:的类规则时,找不到已注册的对应Screen子类,会自动动态生成一个空的临时OnePlayer类做占位——这个临时类里没有你编写的gago()方法。
等你后续再手动定义class OnePlayer(Screen)时,KV规则已经和之前自动生成的空类完成绑定,实际运行时实例化的是那个空的临时类对象,自然找不到gago方法,触发属性错误。
注:KV规则中< OnePlayer >标签两侧的空格不会影响解析,不是报错诱因,不需要修改这部分写法。
修复方案
你可以选择以下任意一种方式修复,优先选第一种:
- (推荐)调整Python代码的执行顺序,先定义
OnePlayer类,再加载KV字符串,保证Kivy解析KV规则时,能直接匹配到你自定义的、带gago()方法的类,不会生成空的占位类。
调整后的Python代码参考:# 先定义自定义Screen类 class OnePlayer(Screen): def gago(self): self.ids.title.text = "5" # 类定义完成后再加载KV规则 Builder.load_string(oneplayer) - 如果你因为业务逻辑必须先加载KV,可以在类定义完成后手动重新注册KV规则,但这种写法冗余度高,非必要不使用。
调整顺序后重启程序,按钮点击触发gago()方法即可正常运行。
内容的提问来源于stack exchange,提问作者Makieyot
相关产品推荐
相关产品推荐

