Как вызвать обратный вызов, когда логический флаг устанавливается с помощью часов Kivy?
У меня есть некоторый код, работающий в отдельном потоке, и мой основной поток GUI зависит от этого кода. Я сделал логический флаг, чтобы отметить работу как выполненную, но я не могу придумать способ вызова функции, когда этот флаг устанавливается.
Что-то вроде этого блокирует основной поток и приложение зависает, чего я хочу избежать:
while not flag:
pass
callback()
Использование вызовов типа Clock.idle() или Clock.usleep(1) вместо pass также не сработало. Есть ли в Kivy что-то вроде Clock.schedule_once, что принимает флаг, проверяет его на каждой итерации цикла событий и вызывает обратный вызов, как только он True?
EDIT
Именно здесь устанавливается флаг, часть класса 1:
async def prepare(self):
# heavy computations...
self.flag = True
И вот класс 2, подкласс kivy.app.App, который имеет свойство объекта класса 1 и проверяет его свойство flag в цикле:
def action(self):
# start the `prepare` method here
while not self.obj.flag:
pass
proceed()
1 ответ:
Вы можете сделать это, когда флаг установлен.:
def prepare(self): # heavy computations... self.flag = True YourAppClass.startClock()И в вашем классе приложений, что-то вроде этого:
YourAppClass(App): def startClock(self): Clock.schedule_once(self.myCallback,0) # run clock thread next frame def myCallback(self,dt): # do something
Comments