Kivy – Screen Manager – доступ к атрибуту в другом классе

Используя Kivy Screen Manager, я создаю два экрана. Пока я на экране 1, я хочу изменить ярлык на экране два. Я выделяю проблемную область в своем коде:

мой test.ky:

#: import ScreenManager kivy.uix.screenmanager.ScreenManager #: import Screen kivy.uix.screenmanager.ScreenManager #: import SettingsScreen screen ScreenManager: MenuScreen: SettingsScreen: <MenuScreen>: name: 'MenuScreen' BoxLayout: Button: text: 'Goto nn' on_press: root.manager.current = 'SettingsScreen' root.change_text() <SettingsScreen>: name: 'SettingsScreen' label_id: label_field BoxLayout: Label: id: label_field text: "to_be_changed" 

и мой screen.py

 from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.screenmanager import ScreenManager, Screen class MenuScreen(Screen): def change_text(self): pass # HERE: something like # root.SettingsScreen.label_field.text = 'new text' class SettingsScreen(Screen): pass class TestApp(App): pass TestApp().run() 

Любая помощь очень ценится! Спасибо, Нико

One Solution collect form web for “Kivy – Screen Manager – доступ к атрибуту в другом классе”

Как насчет этого:

Когда вы нажимаете кнопку на MenuScreen, она устанавливает для себя атрибут, содержащий текст, который вы хотите поместить в метку SettingsScreen. Затем MenuScreen назначается значение id в файле kv, которое используется для ссылки на этот атрибут. Пример:

main.py

 class MenuScreen(Screen): text = StringProperty('') def change_text(self): self.text = "The text you want to set" self.manager.current = "SettingsScreen" class SettingsScreen(Screen): label_text = StringProperty('') 

файл kv

 ScreenManager: id: screen_manager MenuScreen: id: menu_screen name: 'MenuScreen' manager: screen_manager SettingsScreen: name: 'SettingsScreen' manager: screen_manager label_text: menu_screen.text <MenuScreen>: BoxLayout: Button: text: 'Goto nn' on_press: root.change_text() <SettingsScreen>: BoxLayout: Label: text: root.label_text 

Как вы можете видеть, я установил имена и идентификаторы экранов под самим ScreenManager в файле kv, так как это то, что я обычно делал для выполнения этой работы.

  • Buildozer «Command» 'возвращает ненулевой статус выхода 1 "
  • Python не может импортировать имя <class>
  • Ярлык, на который не влияет AnchorLayout - Kivy
  • Ошибка команды Buildozer
  • Переключение экранов с движением в киви
  • Как я могу скрыть заголовок окна главного окна и поместить прозрачный фон в рамки kivy?
  • Разница между Kivy и Java для приложений для Android
  • Kivy: drag n drop, получить путь к файлу
  • Python - лучший язык программирования в мире.