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

Kivy开发:通过ScreenManager调用另一类内函数的问题求助

问题修复说明

你代码存在两处核心错误,直接修改即可实现需求:

  • TestTabs类的TestCallback是实例方法,缺少必须的self参数,调用时会触发参数数量不匹配报错
  • Welcome类的MoveOn方法调用路径错误:你尝试调用TestScreen的TestCallback方法,但该方法实际定义在TestScreen的子组件TestTabs中,TestScreen本身没有这个方法。

修复步骤

  1. 给TestCallback方法加self参数
  2. 在TestScreen初始化时,将TestTabs实例存为自身属性,方便外部调用
  3. 调整MoveOn的调用路径,优先用屏幕name属性查找屏幕,避免后续调整屏幕顺序时索引失效

修改后可运行代码

from kivymd.uix.screen import MDScreen
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
from kivy.uix.tabbedpanel import TabbedPanel
from kivy.uix.scrollview import ScrollView
from kivy.uix.gridlayout import GridLayout


Builder.load_file('TestKV.kv')
class Welcome(Screen):
    def __init__(self, **kwargs):
        super(Welcome, self).__init__(**kwargs)

    def MoveOn(self):
        # 按name查找屏幕更稳妥,调用TestScreen下挂载的test_tabs实例的方法
        self.manager.get_screen("Stack").test_tabs.TestCallback()
        # 如果需要同时跳转到第二个屏幕,加上下面这句即可
        # self.manager.current = "Stack"

class TestTabs(TabbedPanel):
    def __init__(self, **kwargs):
        super(TestTabs, self).__init__(**kwargs)

    # 补全self参数
    def TestCallback(self):
        print("Success")

class TestScreen(Screen):
    def __init__(self, **kwargs):
        super(TestScreen, self).__init__(**kwargs)
        # 将TestTabs实例存为自身属性
        self.test_tabs = TestTabs()
        self.add_widget(self.test_tabs)

class ExampleApp(MDApp):
    def build(self):
        self.sm = ScreenManager(transition=NoTransition())
        self.sm.add_widget(Welcome(name="Welcome"))
        self.sm.add_widget(TestScreen(name="Stack"))

        self.theme_cls.theme_style = "Dark"
        self.theme_cls.primary_palette = "DeepOrange"
        return self.sm


ExampleApp().run()

KV文件无需修改即可正常运行。

更优实现建议

如果后续组件层级更复杂,建议通过App实例做调用中转,避免组件之间强耦合:

  1. 在ExampleApp类中定义中转方法,内部完成对应组件方法的调用
  2. 任意组件都可以通过MDApp.get_running_app()获取App实例,直接调用中转方法即可,不用关心目标组件的层级路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:54:04