Python/Kivy多屏幕切换功能失效,加载kv文件提示WindowManager为未知类如何解决
问题原因
报错的根本原因是KV文件加载顺序错误:你在Python代码中定义WindowManager、MenuWindow、Game这三个自定义类之前,就调用了Builder.load_file("my.kv")加载KV文件。KV文件解析时需要用到上述三个自定义类,但此时Python还未完成类的注册,因此会抛出「未知类」的错误。
修复方案
只需调整代码顺序,把KV加载的逻辑放到所有自定义类定义完成之后即可,修改后的完整Python代码如下:
import kivy from kivy.app import App from kivy.uix.widget import Widget from kivy.lang.builder import Builder from kivy.uix.screenmanager import Screen, ScreenManager from kivy.vector import Vector from kivy.uix.floatlayout import FloatLayout # 先完成所有自定义类的定义 class WindowManager(ScreenManager): pass class MenuWindow(Screen): pass class Game(Screen): pass # 类全部定义完成后再加载KV文件 kv = Builder.load_file("my.kv") class MyApp(App): def build(self): return kv if __name__ == "__main__": MyApp().run()
KV文件不需要做任何修改,修改后重新运行代码即可正常启动,点击Play按钮可以正常切换到游戏界面。
如果不想提前定义kv变量,也可以直接把KV加载逻辑放到build方法中,效果完全一致:
class MyApp(App): def build(self): return Builder.load_file("my.kv")
内容的提问来源于stack exchange,提问作者Kol4o100
相关产品推荐
相关产品推荐

