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

无.kv文件实现Kivy ScreenManager页面切换报错排查

可行性说明

完全可以仅通过Python代码实现Kivy框架的ScreenManager页面切换,无需依赖.kv文件,你遇到的运行错误属于代码逻辑编写问题,和实现方案本身无关。

问题根因

你的代码一共存在3处问题,其中第一处直接触发了你看到的AttributeError:

  • 事件绑定逻辑错误:self.button1.bind(on_press=self.screenTransition()) 这行在绑定事件时,直接调用了screenTransition()方法,而非将方法对象传入bind参数。此时emotionRecog屏幕实例还未被添加到ScreenManager中,实例的self.manager属性值为None,方法执行时访问self.manager.current就会抛出NoneType无current属性的错误。正确绑定方式是传入方法本身,不要在方法名后加括号调用。
  • 屏幕布局未正确挂载:你在emotionRecog的__init__方法中创建BoxLayout后直接return layout,但Kivy组件的__init__方法不会接收返回值作为子控件,必须显式调用self.add_widget(layout)将布局挂载到Screen实例上,否则按钮不会在界面中显示。
  • 父类初始化参数传递缺失:testW类的super调用没有传入**kwargs,会导致name这类Screen初始化参数无法正常传递,后续切屏时会找不到对应名称的目标屏幕。
修复后完整代码
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout


class ScreenManagement(ScreenManager):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)


class testW(Screen):
    def __init__(self, **kwargs):
        # 补全kwargs传递,保证屏幕名称等初始化参数正常生效
        super().__init__(**kwargs)


class emotionRecog(Screen):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.button1 = Button(text="Next", size_hint=(1, .1))
        # 修复事件绑定:传入方法对象,不提前调用
        self.button1.bind(on_press=self.screenTransition)
        layout = BoxLayout(orientation="vertical")
        layout.add_widget(self.button1)
        # 显式添加布局到当前屏幕
        self.add_widget(layout)

    def screenTransition(self, *args):
        self.manager.current = 'test'


class CamApp(App):
    def build(self):
        sm = ScreenManagement(transition=FadeTransition())
        sm.add_widget(emotionRecog(name='emotion'))
        sm.add_widget(testW(name='test'))
        return sm


if __name__ == "__main__":
    CamApp().run()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:12:36