[英]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.