Для этого случая вы можете использовать getattr
:
test.kv
BoxLayout:
orientation: "vertical"
Label:
id: 1
Label:
id: 2
Label:
id: 3
Label:
id: 4
Label:
id: 5
Button:
text: "press me"
on_press: app.testFn()
main.py
from kivy.app import App
class TestApp(App):
def testFn(self):
for i in range(1, 6):
getattr(self.root.ids, str(i)).text = str(5*i)
if __name__ == '__main__':
TestApp().run()
Или воспользуйтесь тем, что self.ids - это словарь, в котором ключом является идентификатор, а значением - виджет.
from kivy.app import App
class TestApp(App):
def testFn(self):
for i in range(1, 6):
self.root.ids[str(i)].text = str(5*i)
if __name__ == '__main__':
TestApp().run()
Примечание: Имейте в виду, что в прошлом для self.ids[]
должна быть строка.
Обновление:
Расчет.KV
BoxLayout:
CustomLabel1:
id: 1
CustomLabel2:
id: 2
CustomLabel3:
id: 3
CustomLabel4:
id: 4
CustomLabel5:
id: 5
Button:
text: "Calculate values"
on_press: app.calculate_values(2,4)
<CustomLabel1@Label>:
<CustomLabel2@Label>:
<CustomLabel3@Label>:
<CustomLabel4@Label>:
<CustomLabel5@Label>:
main.py
from kivy.app import App
class TestApp(App):
def calculate_values(self, start, end):
for i in range(start, end):
self.root.ids[str(i)].text = str(5*i)
if __name__ == '__main__':
TestApp().run()