генератор (yield) в функции кнопки
Я пишу текстовый квест с помощью Kivy, и для того чтобы label поочерёдно обновлялся текстом из txt файла я решил использовать генераторы, а конкретно вызов yield в функциях. Однако после многократного запуска функции, функция-генератор сдвинула значение лишь на один индекс. Как это решить?(и с чем это связанно?)
kv DL:
Button:
text: 'D'
on_press: root.nexttt()
def changet_main(self):
try:
with open('D:\pyhpn\projects\game1\dialogs\main.txt','r',
encoding = 'utf-8') as f_1:
load_fl_1 = f_1.readlines() < список из всех строк в файле main.txt
for i in load_fl_1:
self.ids['main_label'].text = i
print(i)
yield <<<
except IndexError:
pass
def nexttt(self):
main = Body.changet_main(self)
next(main)
файл main.txt включает в себя 3 строки
Ответы (1 шт):
Автор решения: nigani
→ Ссылка
Ты при вызове Body.changet_main(self) каждый раз создаешь генератор заново.
Создай генератор, например, в __init__.
Примерно так:
class example:
strings=['python', 'kivy', 'генераторы']
def __init__(self):
self.generator = self.changet_main()
def changet_main(self):
for i in self.strings:
print(i)
yield
def nexttt(self):
try:
next(self.generator)
except StopIteration:
print(f"! Ошибка: Закончились строки")
except Exception as exc:
print(f"! Какая-то другая ошибка: {exc}")
test = example()
test.nexttt() # python
test.nexttt() # kivy
test.nexttt() # генераторы
test.nexttt() # ! Ошибка: Закончились строки