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?