Wie kann ich von einem anderen Widget in Kivy auf ein Widget-Attribut zugreifen?

Ok sagen wir, ich möchte, dass dieses Label in einem Widget Text aus Label in einem anderen Widget verwendet:

<SubWidget@RelativeLayout>:
    Label:
        text: str(root.parent.ids.first.text)

<RootWidget>:
    Label:
        id: first
        center_x: 100
        text: "text"

    SubWidget:
        id: second
        center_x: 200

Dies funktioniert, scheint aber keine gute Lösung zu sein. Wenn ich @ platzieren werfirst in einem anderen Widget muss ich den Verweis darauf überall im Code ändern (das kann zu Fehlern führen).

Meine erste Idee war zumindest, einen Verweis auf @ zu speicherfirst auf Root-Ebene und Verweis darauf:

<,code><SubWidget@RelativeLayout>:
    Label:
        text: str(root.parent.l.text)


<RootWidget>:
    l: first

    Label:
        id: first
        center_x: 100
        text: "text"

    SubWidget:
        id: second
        center_x: 200

Aber dies führt zu einer Ausnahme:

AttributeError: 'NoneType' object has no attribute 'text'

Das ist verwirrend, da, wenn ich etwas wie @ schreiben wertext: str(root.parent.l) Ich werde sehenLabel object eher, alsNoneType.

So habe ich zwei Fragen:

Warum funktioniert die zweite Lösung nicht? Wie kann es behoben werden?Was ist im Allgemeinen der beste Weg, um von einem anderen Widget aus auf ein Widget-Attribut zuzugreifen? Kann ich es unabhängig von der Widgets-Hierarchie machen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage