Как получить доступ к атрибуту виджета из другого виджета в Kivy?
Хорошо, скажем, я хочу, чтобы эта метка в каком-то виджете использовала текст из метки внутри другого виджета:
<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
Это работает, но не кажется хорошим решением. Если я размещуfirst
внутри другого виджета мне нужно будет изменить ссылку на него везде в коде (что может привести к ошибкам).
Моей первой идеей было хотя бы сохранить ссылку наfirst
на корневом уровне и ссылка на него:
<,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
Но это приводит к исключению:
AttributeError: 'NoneType' object has no attribute 'text'
Это сбивает с толку, так как если я напишу что-то вродеtext: str(root.parent.l)
я увижуLabel object
скорее, чемNoneType
.
Итак, у меня есть два вопроса:
Почему не работает второе решение? Как это можно исправить?В общем, как лучше всего получить доступ к атрибуту виджета из другого виджета? Могу ли я сделать это независимым от иерархии виджетов?