在后台任务

时间:2016-05-19 10:00:37

标签: python qt user-interface pyqt pyside

我有一个用pyside在python中编写的简单gui应用程序。有一个主窗口,还有一些模态QDialogs。根据用户在某些对话框中的操作,应用程序可能必须连接到数据库并在其中执行相应的任务。 问题是:数据库操作可能需要几秒钟才能完成,我的用户倾向于认为程序卡住了,因此他们开始疯狂地点击并粘贴密钥。为了防止这种不稳定的行为,我想停用所有窗口并显示一些加载符号以平息事情。 我需要创建什么(左 - 正常状态,右 - 忙状态):

Example of what is needed

这不是实际的应用程序,只是我想要实现的近似模式。

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

我很感激任何建议或解决类似任务的链接(出于某种原因,我无法谷歌任何相关的自己,也许我使用错误的关键字)。

1 个答案:

答案 0 :(得分:2)

通常,您执行此操作的方式是使用某种进度指示器,QProgressBarQProgressDialog

使用QProgressDialog,您可以采用模式启动它,以防止用户与基座QDialogQMainWindow进行互动。

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