在后台任务期间停用 pyside 生成的 windows

Inactivate pyside-generated windows for the duration of background task

我有一个用 python 用 pyside 编写的简单 gui 应用程序。有一个主要 window 和一些模态 QDialogs。根据用户在其中一些对话框中的操作,应用程序可能必须连接到数据库并在其中执行相应的任务。 问题是:数据库操作可能需要几秒钟才能完成,我的用户往往认为程序卡住了,所以他们开始疯狂地四处点击并捣碎按键。为了防止这种不稳定的行为,我想停用所有 windows 并显示一些加载符号以使事情平静下来。 我需要创建什么(左 - 正常状态,右 - 忙碌状态):

这不是实际的应用程序,只是我想要实现的大致架构。

我认为某种 QMovie 应该可以解决问题,但我不知道如何用半透明的白色覆盖对话框并在其顶部显示加载符号。我也在考虑 QProgressBar,但我不确定它是否适合该任务。

对于解决类似任务的任何建议或 link,我将不胜感激(出于某种原因,我自己无法 google 任何相关的事情,也许我使用了错误的关键字)。

通常,您可以使用某种进度指示器来执行此操作,QProgressBarQProgressDialog

使用 QProgressDialog,您可以模态启动它以防止用户与基础 QDialogQMainWindow.

交互

无论哪种方式,您仍然应该在另一个线程中执行慢速 运行 任务;否则,GUI 将冻结。用户将无法移动 window 或对话框,它不会响应他们的点击,并且您所做的任何进度更新都不会显示在 GUI 中。