App.get_running_app().root.my_method() - 'NoneType' 对象没有属性 'my_method()

App.get_running_app().root.my_method() - 'NoneType' object has no attribute 'my_method()

我尝试在按下按钮后调用 Screenmanager 上的函数。但是调用 (App.get_running_app().root.) 并没有给我一个对象。

按钮对我不起作用,我不知道为什么。

似乎有一个问题,我没有根对象,但为什么。在我尝试使用仪表板之前它就起作用了。

我已经尝试包含来自 ScreenManager Class 的方法,但我无法调用 并从仪表板 class 中调用方法,该函数。

python 文件:

from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.app import App
class DashboardScreen(Screen):

    def __init__(self, **kwargs):
        super(DashboardScreen, self).__init__(**kwargs)
        # Initialize Target Container
        App.get_running_app().root.get_character_selection_screen()


class MyScreenManager(ScreenManager):

    def __init__(self, **kwargs):
        super(MyScreenManager, self).__init__(**kwargs)
        self.add_widget(DashboardScreen(name='dashboard'))

    def get_character_selection_screen(self):
        pass


class MatrixApp(App):

    def build(self):
        return MyScreenManager()


if __name__ == '__main__':
    MatrixApp().run()

Kivy 文件:

<DashboardScreen>:
    BoxLayout:
        orientation: "vertical"
        Label:
            text: "test"

错误信息 AttributeError: 'NoneType' 对象没有属性 'get_character_selection_screen'

缩进可能乱七八糟,因为我试着把它上传到这里。

尝试使用时钟安排它,以确保应用程序和小部件已准备就绪

from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.app import App
from kivy.clock import Clock

class DashboardScreen(Screen):

    def __init__(self, **kwargs):
        super(DashboardScreen, self).__init__(**kwargs)
        Clock.schedule_once(self.after_init)

    def after_init(self, dt):
        App.get_running_app().root.get_character_selection_screen()