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