2015-02-23 98 views
1

如何使用动态类将信息从子类中传递到其父类中?在kvlang(Kivy)中使用动态类将信息从子类传递给父类

我有以下简单的KV代码和Python代码:

KV:

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文件中有一个解决方案。

有没有人有一个想法如何做到这一点?

编辑:

有趣的是,我能够传递信息作为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 2015-02-24 19:13:20

+0

啊,我认为在我的例子中实际上有一个错误,稍后会修复。 – inclement 2015-02-24 19:34:12

+0

我刚刚发现我能够将信息作为StringProperty传递。请参阅编辑的问题 – yoel 2015-02-27 20:43:11