简体   繁体   English

Kivy:我无法访问 ScreenManager 中存储的所有屏幕

[英]Kivy: I can't access all stored Screens in the ScreenManager

I store 3 Screen in the ScreenManager:我在 ScreenManager 中存储了 3 个屏幕:

I want to acces theses stored Screens with print(self.screen.ids["screen_manager"].children)我想使用print(self.screen.ids["screen_manager"].children)这些存储的屏幕

Result expected: [<Screen name='page 1'>, <Screen name='page 2'>, <Screen name='page 3'>]预期结果: [<Screen name='page 1'>, <Screen name='page 2'>, <Screen name='page 3'>]

Actual result: [<Screen name='page 1'>]实际结果: [<Screen name='page 1'>]

Working example:工作示例:

from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen
from page import Page

KV = '''
BoxLayout:
    NavigationLayout:
        id: nav_layout
        ScreenManager:
            id: screen_manager
    Button: 
        text: "Yes"
'''

class TestApp(MDApp):
    def build(self):
        self.screen = Builder.load_string(KV)
        self.screen.ids["screen_manager"].add_widget(Screen(name="page 1"))
        self.screen.ids["screen_manager"].add_widget(Screen(name="page 2"))
        self.screen.ids["screen_manager"].add_widget(Screen(name="page 3"))
        return self.screen

    def on_start(self):
        print(self.screen.ids["screen_manager"].children)

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

I did find a trick: screen_names method.我确实找到了一个技巧: screen_names方法。

Here is the code solution with the get_screens that should be implemented in the official lib?这是应该在官方库中实现的get_screens的代码解决方案?

from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen
from page import Page

KV = '''
BoxLayout:
    NavigationLayout:
        id: nav_layout
        ScreenManager:
            id: screen_manager
    Button: 
        text: "Yes"
'''

class TestApp(MDApp):
    def build(self):
        self.screen = Builder.load_string(KV)
        self.screen.ids["screen_manager"].add_widget(Screen(name="page 1"))
        self.screen.ids["screen_manager"].add_widget(Screen(name="page 2"))
        self.screen.ids["screen_manager"].add_widget(Screen(name="page 3"))
        return self.screen

    def on_start(self):
        print(self.get_screens())

    def get_screens(self):
        return [self.screen.ids["screen_manager"].get_screen(name) for name in self.screen.ids["screen_manager"].screen_names]

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM