使用kvlang中的动态类将信息从子类传递给父类(Kivy)

时间:2015-02-23 21:49:59

标签: kivy dynamic-class

如何使用动态类将信息从子类传递给kvlang中的父类?

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

KV:

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的文本与标签的文本相同。

但我想要做的是在父类中设置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 个答案:

答案 0 :(得分: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会自动创建一个属性。