我有一个Python脚本,用于对用户的文件进行一些密集的处理,可能需要一些时间。我使用Kivy构建了一个用户界面,允许用户选择文件、处理模式,并在处理过程中显示一些消息。
我的问题是,当主Kivy循环调用底层用户界面时,窗口会冻结。
据我所知,解决这个问题的正确方法是创建一个单独的进程,将脚本卸载到其中,并从中向用户界面发送更新。
然而,我找不到如何做这件事的示例,也没有关于如何从单独的线程将消息发送回应用程序的规范。
请问是否能给出正确的示例或者指向相关文档?
更新:
为了保持程序的可维护性,我想避免从主线程调用循环或处理器的元素,而是调用一个长时间的进程,该进程会返回更新后的GUI元素,例如进度条或文本字段。看起来这些元素只能从主kivy线程修改。我如何从外部访问它们?
我的问题是,当主Kivy循环调用底层用户界面时,窗口会冻结。
据我所知,解决这个问题的正确方法是创建一个单独的进程,将脚本卸载到其中,并从中向用户界面发送更新。
然而,我找不到如何做这件事的示例,也没有关于如何从单独的线程将消息发送回应用程序的规范。
请问是否能给出正确的示例或者指向相关文档?
更新:
为了保持程序的可维护性,我想避免从主线程调用循环或处理器的元素,而是调用一个长时间的进程,该进程会返回更新后的GUI元素,例如进度条或文本字段。看起来这些元素只能从主kivy线程修改。我如何从外部访问它们?
kivy.clock.mainthread
装饰器在主线程中调度回调函数的调用。一些示例: https://github.com/kivy/kivy/wiki/Working-with-Python-threads-inside-a-Kivy-application - Nykakin