gpt4 book ai didi

python - 当使用Kivy Clock设置 bool 标志时,如何触发回调?

转载 作者:行者123 更新时间:2023-12-03 13:09:21 25 4
gpt4 key购买 nike

我有一些代码在单独的线程上运行,而我的主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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com