Передача информации от дочернего класса к родительскому, используя динамические классы в 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 создает свойство автоматически.

Другие вопросы по тегам