Передача информации от дочернего класса к родительскому, используя динамические классы в kvlang (Kivy)
Как я могу передать информацию от дочернего класса его родителю в kvlang, используя динамические классы?
У меня есть следующий простой код kv и код Python:
киловольт:
BoxLayout:
Label:
id: label_id
text: 'label'
Button1:
mylabel: label_id
text: self.mylabel.text
<Button1@Button>:
Python:
import kivy
from kivy.app import App
class Test2App(App):
pass
if __name__ == '__main__':
Test2App().run()
Это работает, делая текст кнопки таким же, как текст метки.
Но я хочу установить текст Button в родительском классе:
BoxLayout:
Label:
id: label_id
text: 'label'
Button1:
mylabel: label_id
<Button1@Button>:
text: self.mylabel.text
Это, очевидно, приводит к ошибке, потому что Button1 не знает о mylabel. Но я хочу, чтобы это было. Я знаю, что могу решить эту проблему, объявив свойство в файле Python, но я бы предпочел иметь решение только в одном файле kv.
У кого-нибудь есть идеи, как это сделать?
РЕДАКТИРОВАТЬ:
Интересно, что я могу передавать информацию как StringProperty. Следующий код работает, и я получаю правильный текст на моей кнопке:
BoxLayout:
Label:
id: label_id
text: 'label'
Button1:
my_label_text: label_id.text
<Button1@Button>:
my_label_text: ''
text: self.my_label_text
Кто-нибудь знает, как я могу передать весь ярлык (как объект) родителю?
1 ответ
Попробуй это:
BoxLayout:
Label:
id: label_id
text: 'label'
Button1:
mylabel: label_id
<Button1@Button>:
mylabel: None
text: self.mylabel.text if self.mylabel is not None else ''
mylabel: None
создает свойство автоматически.