Что ж, я могу исправить это для вас, но, честно говоря, я не думаю, что вы правильно используете шаблоны kv. Но это все равно будет работать.
Новый шаблон сам по себе является правилом, у него есть собственный корень, поэтому взамен корень приложения (app.root) не будет иметь прямого доступа к идентификаторам детей, определенным в их собственных шаблонах. Таким образом, вам нужно связаться с его прямым потомком, который создаст шаблон, содержащий дочерний элемент, к которому вы хотите получить доступ, и вы достигнете этого потомка по его идентификатору.
Например, в вашем коде kv вам нужно изменить строку 63 (kv) с:
app.root.ids.changethis.text = app.root.ids.getthis.text
до:
app.root.ids.mainscreen.ids.changethis.text = app.root.ids.settings.ids.getthis.text
и строка 99 (python) из:
thelabel=Label(text=self.parent.settings.settingbox.getthis.text)
до:
thelabel=Label(text=self.parent.ids.settings.ids.getthis.text)
Почему рут (или любой родительский виджет) не должен обращаться к идентификаторам, определенным в отдельных шаблонах?
Шаблоны или динамические классы созданы для повторного использования, как и любой нестатический класс.
Рассмотрим следующий сценарий:
BoxLayout:
CustomWidget:
id: wdg1
CustomWidget:
id: wdg2
Button:
text: 'change text of first label'
on_press: root.ids.lbl.text = 'new text'
<CustomWidget@Widget>:
Label:
text: 'some text'
id: lbl
Теперь у корневого виджета есть два экземпляра CustomWidget в качестве дочерних элементов, таким образом, два дочерних ярлыка имеют идентификатор «lbl». Какой из них должен быть вызван, если корень вызвал lbl напрямую?
Чтобы справиться с этим, вы можете вызвать lbl из его прямого экземпляра шаблона. Таким образом: root.ids.wdg1.ids.lbl.text для метки внутри первого виджета или root.ids.wdg2.ids.lbl.text для метки внутри второго виджета.