Проблема в вашем коде в том, что id
работает только в синтаксисе kv.
Так что вам нужно ссылаться на ваши виджеты другим способом.
В случае, если вам нужно сделать это таким образом, динамически добавляяв kv и доступе в цикле в python, вы можете попробовать что-то вроде примера ниже.
В этом случае текст изменится через 5 секунд. Если вы знаете, что единственными дочерними элементами этого вида сетки будут виджеты, к которым вы хотите получить доступ, вы можете просто повторить дочерние элементы.
from kivy.app import App
from kivy.lang import Builder
from kivy.clock import Clock
KV = """
#: import TextInput kivy.uix.textinput.TextInput
GridLayout:
cols:1
on_kv_post:
for i in range(2): app.dynamic_widgets.append(TextInput())
for wid in app.dynamic_widgets: self.add_widget(wid)
"""
class DocApp(App):
dynamic_widgets = []
def build(self):
Clock.schedule_once(self.set_text, 5)
return Builder.load_string(KV)
def set_text(self, dt):
texts=['txtip1','txtip2']
for text, wid in zip(texts, self.dynamic_widgets):
wid.text = text
if __name__=="__main__":
DocApp().run()
Теперь, если вы удалите один из виджетов, вы, вероятно, захотитеудалить его из списка.