Kivy (MD) - 在分离 Kivy classes 时如何访问 class 属性?

Kivy (MD) - How do you access class properties when you separate the Kivy classes?

抱歉,如果我混淆了我的术语。我把这个例子放在一起来说明我的问题。我想访问标签的文本 属性,我将其放入 LabelOne class。使用 .py:

from kivy.lang import Builder

from kivymd.app import MDApp
from kivymd.uix.boxlayout import MDBoxLayout
from kivymd.uix.label.label import MDLabel


class LabelOne(MDLabel):
    pass

class LayoutEx(MDBoxLayout):
    pass

class MainApp(MDApp):

    def build(self):
        self.theme_cls.theme_style = 'Light'
        self.theme_cls.primary_palette = 'Blue'

        return Builder.load_file('figure_out_ids.kv')

    def on_start(self):
        self.root.ids.label_one.text = 'changed'


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

我使用 on_start 方法访问标签的文本 属性。 现在,当我像这样构建我的 .kv 代码时:

LayoutEx:
    id: layout_ex

    LabelOne:
        id: label_one
        text: 'test'
        halign: 'center'

on_start 方法非常有效,我可以在 python 中操作 label_one.text。 但是,我真正想要做的是将 .kv 文件中的 LabelOne class 分开,然后这样写:

<LabelOne>:
    id: label_one
    text: 'test'
    halign: 'center'

LayoutEx:
    id: layout_ex

    LabelOne:

并且仍然能够从 MainApp on_start 方法调用标签,但这会给出:AttributeError: 'super' object has no attribute '__getattr__' 错误。现在通过浏览互联网,我了解到我必须将 self.root.ids.label_one.text = 'changed' 更改为 self.parent1.parent2.ids.label_one.text 之类的内容,但我无法理解需要在 parent1parent2斑点。我整天都在坚持这一点,我希望有人能帮助我理解这里的过程。我怀疑是我缺乏基本的 python 知识导致了这个问题。非常感谢您!!

  1. kivy 中没有任何东西 self.parent1.parent2. 可以使用 parent.parent..... 直到你找到所需的小部件

  2. 这种情况的最佳解决方案是将 LabelOne 的 id 放在根小部件中,您可以将所有其他 LabelOne 属性放在 LabelOne class 像这样

<LabelOne>:
    
    text: 'test'
    halign: 'center'

LayoutEx:
    id: layout_ex

    LabelOne:
        id: label_one

然后您可以使用 kv 文件中的 python app.root.label_oneMainApp class 中的 python self.root.ids.label_one 访问任何 LabelOne 属性 你可以找到很多解决方案,但这是最好的