python – Kivy – 屏幕管理器 – 访问其他类中的属性

前端之家收集整理的这篇文章主要介绍了python – Kivy – 屏幕管理器 – 访问其他类中的属性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用Kivy Screen Manager,我创建了两个Screens.在屏幕1中,我想在屏幕2中更改标签.我在我的代码中突出显示了有问题的区域:

我的test.ky:

  1. #: import ScreenManager kivy.uix.screenmanager.ScreenManager
  2. #: import Screen kivy.uix.screenmanager.ScreenManager
  3. #: import SettingsScreen screen
  4.  
  5.  
  6. ScreenManager:
  7. MenuScreen:
  8. SettingsScreen:
  9.  
  10.  
  11. <MenuScreen>:
  12. name: 'MenuScreen'
  13. BoxLayout:
  14. Button:
  15. text: 'Goto nn'
  16. on_press:
  17. root.manager.current = 'SettingsScreen'
  18. root.change_text()
  19.  
  20.  
  21. <SettingsScreen>:
  22. name: 'SettingsScreen'
  23. label_id: label_field
  24. BoxLayout:
  25. Label:
  26. id: label_field
  27. text: "to_be_changed"

和我的screen.py

  1. from kivy.app import App
  2. from kivy.uix.Boxlayout import BoxLayout
  3. from kivy.uix.screenmanager import ScreenManager,Screen
  4.  
  5.  
  6. class MenuScreen(Screen):
  7. def change_text(self):
  8. pass
  9. # HERE: something like
  10. # root.SettingsScreen.label_field.text = 'new text'
  11.  
  12.  
  13. class SettingsScreen(Screen):
  14. pass
  15.  
  16.  
  17. class TestApp(App):
  18. pass
  19.  
  20. TestApp().run()

任何帮助是极大的赞赏!
谢谢,尼科

解决方法

这个怎么样:

当您按下MenuScreen上的按钮时,它会在其自身上设置一个属性,其中包含您要放入SettingsScreen标签中的文本.然后在菜单屏幕中为kv文件分配一个id值,该值用于引用此属性.例:

main.py

  1. class MenuScreen(Screen):
  2. text = StringProperty('')
  3. def change_text(self):
  4. self.text = "The text you want to set"
  5. self.manager.current = "SettingsScreen"
  6.  
  7. class SettingsScreen(Screen):
  8. label_text = StringProperty('')

kv文件

  1. ScreenManager:
  2. id: screen_manager
  3. MenuScreen:
  4. id: menu_screen
  5. name: 'MenuScreen'
  6. manager: screen_manager
  7. SettingsScreen:
  8. name: 'SettingsScreen'
  9. manager: screen_manager
  10. label_text: menu_screen.text
  11.  
  12. <MenuScreen>:
  13. BoxLayout:
  14. Button:
  15. text: 'Goto nn'
  16. on_press:
  17. root.change_text()
  18.  
  19. <SettingsScreen>:
  20. BoxLayout:
  21. Label:
  22. text: root.label_text

正如您所看到的,我在屏幕管理器中设置了屏幕的名称和ID在kv文件中,因为这是我通常要做的工作.

猜你在找的Python相关文章