1

如何使用动态类将信息从子类传递给 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()

这有效,使按钮的文本与标签的文本相同。

但我想做的是在父类中设置按钮的文本:

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

有谁知道我如何将整个标签(作为对象)传递给父级?

4

1 回答 1

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自动创建一个属性。

于 2015-02-24T00:16:21.513 回答