Хорошо, скажем, я хочу, чтобы эта метка в каком-то виджете использовала текст из метки внутри другого виджета:
<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
на корневом уровне и ссылаться на нее:
<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
.
Итак, у меня есть два вопроса:
- Почему второе решение не работает? Как это можно исправить?
- В общем, как лучше всего получить доступ к некоторому атрибуту виджета из другого виджета? Могу ли я сделать его независимым от иерархии виджетов?