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

Kivy ScreenManager切换屏幕报错:找不到名为home的Screen

问题修复方案

问题根源

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

  1. .py文件末尾手动创建的sm实例
  2. .kv文件根节点定义的ScreenManager实例

MainApp实际运行的是kv加载的ScreenManager,但EntryWindow的切换逻辑却在操作手动创建的sm实例,两者毫无关联,自然找不到名为"home"的屏幕。

修复步骤

1. 删除冗余的ScreenManager实例

直接删掉.py文件末尾这段重复创建的代码:

sm =  ScreenManager()
sm.add_widget(EntryWindow(name="starting"))
sm.add_widget(Home(name="home"))
sm.add_widget(Exercises(name="exercises"))
sm.add_widget(Gender(name="gender"))

同时在.kv文件的ScreenManager节点下补上缺失的Gender屏幕:

ScreenManager:
    EntryWindow:
    Home:
    Exercises:
    Gender:  # 新增这一行,确保所有屏幕都在同一个ScreenManager下

2. 修改EntryWindow实现1秒延迟跳转

把EntryWindow的切换逻辑改成使用屏幕自带的self.manager属性(自动指向当前所属的ScreenManager),并用Clock实现1秒延迟:

class EntryWindow(Screen):
    def on_enter(self):
        # 延迟1秒执行切换操作
        Clock.schedule_once(self.switch_to_home, 1)
    
    def switch_to_home(self, dt):
        self.manager.current = "home"

修复逻辑说明

  • self.manager是Kivy Screen类的内置属性,自动关联当前屏幕所属的ScreenManager,彻底避免全局变量导致的实例混淆问题
  • Clock.schedule_once(func, delay)是Kivy官方推荐的延迟执行方式,这里设置延迟1秒,正好满足启动页显示1秒后跳转的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:59:51