簡體   English   中英

Kivy:我無法訪問 ScreenManager 中存儲的所有屏幕

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

我在 ScreenManager 中存儲了 3 個屏幕:

我想使用print(self.screen.ids["screen_manager"].children)這些存儲的屏幕

預期結果: [<Screen name='page 1'>, <Screen name='page 2'>, <Screen name='page 3'>]

實際結果: [<Screen name='page 1'>]

工作示例:

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()

我確實找到了一個技巧: screen_names方法。

這是應該在官方庫中實現的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