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

Kivy调用home_switch报错不存在名为home的screen如何解决

问题根本原因

你代码里存在两个完全独立的WindowManager实例:

  1. 你在全局作用域手动创建了sm = WindowManager(),这个实例从未添加过任何Screen,没有叫home的页面是必然的
  2. 你在build方法里通过Builder.load_file('Vocate.kv')又生成了一个全新的WindowManager实例,这个实例才是真正包含了start、sign up、log in、home四个Screen的有效实例,也是你App实际渲染的根控件
    你在Sign_Up.signup方法里调用的是全局无效的sm实例的方法,自然会报错找不到home页面。

修复方案

做两处简单修改即可:

  1. 删除全局无用的sm = WindowManager()这行代码
  2. 修改Sign_Up.signup方法里的切换逻辑,通过Screen自带的manager属性获取它所属的有效WindowManager实例,再调用切换方法

修改后的Python代码片段

class Sign_Up(Screen):
    def signup(self):
        signup_password = self.signup_password.text
        signup_password_re = self.signup_password_re.text
        if signup_password != "" and signup_password_re != "":
            if signup_password == signup_password_re:
                print ("correct")
                # 把原有的sm.home_switch()改成下面这行
                self.manager.home_switch()
            else:
                print ("incorrect")
        else:
            print ("empty")

# 全局的这行代码直接删除即可
# sm = WindowManager()

补充说明

你之前尝试的操作失效原因:

  • 删除kv里的WindowManager:后,Builder加载kv只会注册各个Screen的样式规则,不会创建实际的ScreenManager实例和添加子Screen,build方法返回空,自然显示空白
  • 移除Builder加载逻辑、重命名kv为同名文件后失效,是因为MDApp的自动加载kv规则要求App类名去掉App后缀后和kv文件名匹配,你的App类是MainApp,对应的kv文件名应该是main.kv(全小写),而且要保证build方法没有自定义返回值才会触发自动加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:36:04