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