我有一些代码在单独的线程上运行,而我的主GUI线程取决于该代码。我已经创建了一个 bool 型标记来将作业标记为已完成,但是当该标记被设置时,我无法提出一种调用函数的方法。
诸如此类的东西阻塞了主线程,并且应用程序冻结了,这是我要避免的事情:
while not flag:
pass
callback()
使用
Clock.idle()
或Clock.usleep(1)
之类的调用来代替pass
也不起作用。 Kivy中是否有类似Clock.schedule_once
的东西可以接受一个标志,在每次事件循环迭代时对其进行检查,并在它成为True
时调用回调函数?编辑
这是设置标志的地方,属于类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()
最佳答案
您可以在设置了标志的地方执行以下操作:
def prepare(self):
# heavy computations...
self.flag = True
YourAppClass.startClock()
在您的App类中,如下所示:
YourAppClass(App):
def startClock(self):
Clock.schedule_once(self.myCallback,0) # run clock thread next frame
def myCallback(self,dt):
# do something
关于python - 当使用Kivy Clock设置 bool 标志时,如何触发回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41298315/