2015-02-23 1 views
1

Как передать информацию из дочернего класса в родительский элемент в kvlang, используя динамические классы?Передача информации из дочернего класса в родительский, с использованием динамических классов в kvlang (Kivy)

У меня есть следующий простой код Kv и Python код:

киловольт:

BoxLayout: 
Label: 
    id: label_id 
    text: 'label' 
Button1: 
    mylabel: label_id 
    text: self.mylabel.text 

<[email protected]>: 

Python:

import kivy 
from kivy.app import App 

class Test2App(App): 
    pass 

if __name__ == '__main__': 
    Test2App().run() 

Это работает, делая текст кнопки то же самое как текст ярлыка.

Но то, что я хочу сделать, это установить текст кнопки в родительском классе:

BoxLayout: 
Label: 
    id: label_id 
    text: 'label' 
Button1: 
    mylabel: label_id 

<[email protected]>: 
    text: self.mylabel.text 

Это, очевидно, приводит к ошибке, потому что Button1 не знает MyLabel. Но я хочу, чтобы это было. Я знаю, что могу решить это, объявив свойство в файле Python, но я предпочел бы иметь решение внутри файла kv.

У кого-нибудь есть идея, как это сделать?

EDIT:

Интересно, что я могу передать информацию как StringProperty. Следующий код работает, и я получаю правильный текст на моей кнопке:

BoxLayout: 
Label: 
    id: label_id 
    text: 'label' 
Button1: 
    my_label_text: label_id.text 

<[email protected]>: 
    my_label_text: '' 
    text: self.my_label_text 

Кто-нибудь знает, как я могу передать всю этикетку (как объект) к родителю?

ответ

1

Попробуйте это:

BoxLayout: 
    Label: 
     id: label_id 
     text: 'label' 
    Button1: 
     mylabel: label_id 

    <[email protected]>: 
     mylabel: None 
     text: self.mylabel.text if self.mylabel is not None else '' 

mylabel: None создает свойство автоматически.

+0

Спасибо за ответ. Проблема в том, что информация не передается от дочернего элемента к родительскому. Я получаю кнопку без текста. – yoel

+0

Ах, я думаю, что в моем примере есть ошибка, позже будет исправлено. – inclement

+0

Я только что узнал, что могу передавать информацию как StringProperty. См. Отредактированный вопрос – yoel