Python Kivy 无法从另一个类访问 id

Posted

技术标签:

【中文标题】Python Kivy 无法从另一个类访问 id【英文标题】:Python Kivy can't access id from another class 【发布时间】:2021-09-30 16:34:06 【问题描述】:

我无法通过 id 从另一个类获取小部件。我试过app.root.ids.first_lbl.text,但没用。有没有办法做到这一点?

这是我的代码:

ma​​in.py:

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout


class MainWidget(Widget):
    pass

class SecondWidget(BoxLayout):
    pass

class MyApp(App):
    def build(self):
        return MainWidget()


if __name__ == "__main__":
    MyApp().run()

my.kv:

<MainWidget>
    BoxLayout:
        size: root.width, root.height

        BoxLayout:
            Label:
                id: first_lbl
                text: "TEXT123"

        SecondWidget:

<SecondWidget>:
    Label:
        text: app.root.ids.first_lbl.text

【问题讨论】:

【参考方案1】:

这是一个可行的技巧:

<MainWidget>
    BoxLayout:
        size: root.width, root.height

        BoxLayout:
            Label:
                id: first_lbl
                text: "TEXT123"

        SecondWidget:
            t1: first_lbl.text  # set the t1 property of SecondWidget to the text of first_lbl

<SecondWidget>:
    t1: ''
    Label:
        text: root.t1  # use the t1 property of SecondWidget

【讨论】:

以上是关于Python Kivy 无法从另一个类访问 id的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个类/屏幕 kivy 访问值

python - kivy:从另一个类调用函数

Kivy:从另一个类的小部件中检索文本?

为啥我的 kivy 程序没有从另一个类调用函数?

Kivy,python:如何从根类(FaceRecApp)访问外部/子类?

从另一个线程更改 kivy 属性