我在之前的问题中问过关于在按下弹出窗口中的运行按钮后更新弹出窗口以显示"running"之类的内容。问题是,直到进程完成运行后,gui才真正更新,此时更新弹出窗口是毫无意义的。
我已经尝试使用一个单独的线程运行我的进程,但这引入了各种各样的问题,根据我的研究,由于Kivy中的线程问题,这可能不值得追求。
我想知道的是,如果我可以实现一个类似的效果使用时钟对象来安排弹出更新'。点击"运行"按钮后1秒。
这是否真的有效,或者这个时钟对象是否在我的其他进程完成后才真正创建,再次使其无用。
从功能的角度来看,我的程序工作得很好,但我不希望用户在不知道进程正在运行的情况下被困在一个旋转的轮子上。我希望有一个进度条,但这是一个完全不同的挑战,因为我正在运行的功能是使用基于外部控制台的应用程序,不显示进度。
从这个问题可以看出,我对Kivy和GUI开发都是新手。打开弹出窗口,然后安排运行您的长任务的函数
SomePopupClass().open()
Clock.schedule_once(your_long_running_function, 0)
通过将长时间运行的函数安排到下一帧(这是0参数的效果),您给了kivy时间来运行其正常的gui更新循环,因此您将看到在ui被阻塞之前出现弹出窗口。
如果您希望gui在运行时保持响应,则需要为长任务使用线程。对于kivy来说,这样做没有什么大问题。