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

KivyMD点击列表项切换屏幕报错:No Screen with name 'empty'

解决KivyMD切换屏幕报错“No Screen with name 'empty'”的办法

核心问题根源

报错说明你要切换到的empty屏幕未在ScreenManager中注册,或者名字拼写/大小写不匹配。以下是针对性解决步骤:


1. 检查KV文件的ScreenManager配置

确认你的ScreenManager下存在**name严格等于empty**的屏幕,大小写完全敏感:

ScreenManager:
    MessagesScreen:
        name: "messages"
    # 必须有这个定义,名字和要切换的完全一致
    EmptyScreen:
        name: "empty"

如果是在KV里自定义屏幕规则,要确保规则和类名对应:

<EmptyScreen@Screen>:
    # 屏幕内容
    MDLabel:
        text: "Empty Screen"
        halign: "center"

2. 验证Python代码中的屏幕类

如果你用Python定义EmptyScreen,必须继承Screen且正确加载:

from kivy.uix.screenmanager import Screen

class EmptyScreen(Screen):
    pass

同时确保KV文件被正确加载,比如在主入口里添加:

from kivy.lang import Builder
Builder.load_file("你的KV文件名.kv")

3. 修正messages_click方法的切换逻辑

确保调用的是当前屏幕的ScreenManager,别用错对象:

def messages_click(self):
    # 先确认当前屏幕绑定了ScreenManager
    if not self.manager:
        print("当前屏幕未关联ScreenManager")
        return
    
    # 检查目标屏幕是否存在
    target_screen = "empty"
    if target_screen not in [screen.name for screen in self.manager.screens]:
        print(f"ScreenManager中找不到名为{target_screen}的屏幕")
        return
    
    # 执行切换
    self.manager.current = target_screen

如果是在KV里绑定点击事件,要确保回调指向屏幕类的方法:

OneLineAvatarIconListItem:
    on_release: root.messages_click()  # root代表当前MessagesScreen实例

4. 升级Kivy版本解决兼容性问题

你用的Kivy1.1.1版本过于老旧,和KivyMD1.2.0dev兼容性极差,建议升级到和Python3.8兼容的稳定版:

pip install --upgrade kivy==2.1.0 kivymd==1.2.0

老版本ScreenManager存在已知bug,升级后多数异常会自动修复。

5. 调试技巧

在切换前打印所有已注册屏幕的名字,快速定位问题:

def messages_click(self):
    print("当前ScreenManager中的屏幕列表:", [s.name for s in self.manager.screens])
    # 后续切换代码

内容的提问来源于stack exchange,提问作者Максим Игрок

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:21:06