I store 3 Screen in the ScreenManager:
I want to acces theses stored Screens with print(self.screen.ids["screen_manager"].children)
Result expected: [<Screen name='page 1'>, <Screen name='page 2'>, <Screen name='page 3'>]
Actual result: [<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.
Here is the code solution with the get_screens
that should be implemented in the official lib?
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()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.