Kivy-Screen Manager - атрибут доступа в другом классе
используя диспетчер экрана Kivy, я создаю два экрана. Находясь на экране 1, я хочу изменить метку на экране 2. Я выделяю проблемную область в своем коде:
мой тест.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()
любая помощь очень ценится! Спасибо, Нико
1 ответов
Как насчет этого:
когда вы нажимаете кнопку на 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('')
кв
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 файл, так как это то, что я обычно делаю, чтобы сделать эту работу.