Ваш код не является минимальным рабочим примером. Я не вижу, где вы добавляете свой ярлык в виджет. Метка имеет только один текстовый метод.
В этом первом примере я попытаюсь исправить ваш код. Вы запускаете свой виджет с помощью data = LableInfo()
, но пока этот метод не завершится, вы не добавите его в SortieSecreen ()
def label(self):
for i in range(0, len(self.S.sortieType)):
data = LabelInfo()
data.textOne = self.S.sortieType[i]
data.textTwo = self.S.sortieModifier[i]
data.textThree = self.S.modifierDesc[i]
data.textFour = self.S.sortieNode[i]
data.size = 200, 200
data.pos = 100, (500 - (130 * i))
self.add_widget(data) # here you add it
Также я не знаю, является ли это лучшим подходом для добавления чего-либо во время выполнения. Проблема в том, что если вы создаете много виджетов данных, ваше приложение может зависнуть на некоторое время, необходимое для создания и добавления виджета данных.
Другой подход заключается в определении правила KV. Это будет работать, если вы добавите ~ 10-20 виджетов. Более того, ваше приложение может быть отложено.
в файле kv:
<MainView>:
# main layout stuff
<MyBoxLayout>:
orientation: 'vertical' #horizontal is default
Label:
text: root.label_0_text
Label:
text: root.label_1_text
Label:
text: root.label_2_text
Label:
text: root.label_3_text
, а затем в файле py:
class MainView (BoxLayout):
def __init__(self, **kwargs):
super(MainView, self).__init__(**kwargs)
for i in range(4):
lbl = MyBoxLayout()
lbl.label_0_text = str(i) # Label.text only accepts strings
lbl.label_1_text = str(i)
lbl.label_2_text = str(i)
lbl.label_3_text = str(i)
self.add_widget(lbl)
class MyBoxLayout(BoxLayout):
label_0_text = StringProperty()
label_1_text = StringProperty()
label_2_text = StringProperty()
label_3_text = StringProperty()
Лучший подход - RecycledView . С примером документации вы можете ознакомиться по ссылке.