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

如何解决KivyMD中ScreenManager.get_screen()缺少name参数的TypeError?

解决KivyMD中Python代码创建按钮的屏幕跳转错误

错误原因分析

TypeError: ScreenManager.get_screen() missing 1 required positional argument: 'name' 通常是因为你直接调用了ScreenManager类的get_screen方法,而非ScreenManager实例的方法,或者调用时未传入屏幕名称参数。

解决方案

1. 正确获取ScreenManager实例

在Kivy的Screen类中,可以直接通过self.manager获取当前屏幕所属的ScreenManager实例;如果是在App类或其他地方,可通过MDApp.get_running_app().root获取(前提是App的build方法返回的是ScreenManager)。

2. 正确实现屏幕跳转

不需要调用get_screen也能完成跳转,直接设置ScreenManager的current属性为目标屏幕的名称即可,这是更简洁的方式。如果需要获取屏幕实例再操作,确保用实例调用get_screen并传入名称。

示例代码

以下是Contraindicaciones屏幕的Python实现示例,包含跳转按钮:

from kivymd.app import MDApp
from kivymd.uix.screen import MDScreen
from kivymd.uix.button import MDRaisedButton

class ContraindicacionesScreen(MDScreen):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        # 创建跳转按钮
        back_btn = MDRaisedButton(
            text="返回主界面",
            pos_hint={"center_x": 0.5, "center_y": 0.1},
            on_release=self.switch_to_main
        )
        self.add_widget(back_btn)

    def switch_to_main(self, instance):
        # 直接设置current属性完成跳转,替换为你的目标屏幕名称
        self.manager.current = "main_screen"

class MyApp(MDApp):
    def build(self):
        from kivy.uix.screenmanager import ScreenManager
        sm = ScreenManager()
        
        # 添加Contraindicaciones屏幕
        sm.add_widget(ContraindicacionesScreen(name="Contraindicaciones"))
        
        # 添加主屏幕示例
        main_screen = MDScreen(name="main_screen")
        go_btn = MDRaisedButton(
            text="查看禁忌说明",
            pos_hint={"center_x": 0.5, "center_y": 0.5},
            on_release=lambda x: setattr(sm, "current", "Contraindicaciones")
        )
        main_screen.add_widget(go_btn)
        sm.add_widget(main_screen)
        
        return sm

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

常见避坑点

  • 避免直接使用ScreenManager.get_screen("screen_name"),必须用ScreenManager的实例来调用该方法,比如self.manager.get_screen("screen_name")。
  • 确保所有屏幕在ScreenManager中都已注册(即通过add_widget添加,且设置了唯一的name属性)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:03:08