python - Kivy:我无法访问 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()
推荐阅读
- php - BelongsToMany 字段未显示在创建/更新表单上
- fortran - 在 Fortran 中将变量作为语句(命令)运行?
- java - 将对象发送到控制器的问题
- javascript - amcharts 4 中的 amcharts 3 指南等价物是什么
- android - 在 BottomNavigationView (AndroidX) 中找不到资源
- spring-boot - 在新模式中添加第二个飞行路径实例
- android - 在 MVVM 架构中处理来自 api 端点的错误的最佳实践是什么?
- python - 用变量初始化对象参数
- r - 是否有任何用于在 R 中实现分层时间记忆的包?
- java - 将base64转换为文本