Qt5 Python GUI 编程指南
创建时间:2018-12-10  访问量:5743  7  0

Qt5 Python GUI 编程指南

使用 Progress Bar 部件

进度条(Progress Bar)部件是非常有用的,它能表示任何任务执行的进度。无论是从服务器中下载文件、扫描机器上的病毒或其它一些关键的任务,这个Progress Bar部件都可以帮助通知用户的任务完成或未完成的百分比。当任务完成时,Progress Bar部件保持更新,以指示任务中的进度。

准备

为了理解进度条是如何更新显示任意任务进度的,让我们创建一个示例。这个示例将显示一个Progress Bar部件,指示下载文件所需要的总时间。当用户单击按钮时就开始下载文件,Progress Bar部件将会从0%平滑的更新到100%;也就是说,这个进度条将会在下载文件时更新。当文件下载完成时Progress Bar部件将显示100%。

如何去做...

开始时,Progress Bar部件在0%处,要使其不断增长,我们就需要使用循环。循环增加它的值,以使Progress Bar部件向完成的方向前进,以表示任务的完成情况。在循环中的每一个增长都会在Progress Bar部件中加上一些进度。这里一步一步向你展示,进度条是如何进行更新的:

  1. 基于Dialog without Buttons模板新建一个应用程序,并从Widget框中拖动1个Label部件、1个Progress Bar部件和1个Push Button部件放到窗体上。

  2. 将Label部件的text属性设置为Downloading the file并将Push Button的text属性设置为Start Downloading。

  3. 将Push Button部件的objectName属性值设置为pushButtonStart。

  4. 将应用保存为demoProgressBar.ui。显示的窗体如下截图所示:

    

    用户界面是由Qt Designer创建的并保存在一个.ui的文件中,这是一个XML文件并且需要将其转换成Python代码。生成的Python代码demoProgressBar.py可以在本书源码中看到。前面的代码将被作为头文件并导入到需要调用GUI的Python脚本中;也就是说,要想在任意一个Python脚本中访问用户界面设计都需要简单的导入前面的代码。

  1. 创建另一个名为callProgressBar.pyw的Python文件并导入demoProgressBar.py代码。这个Python脚本callProgressBar.pyw中的代码如下所示:
import sys
from PyQt5.QtWidgets import QDialog, QApplication
from demoProgressBar import *
class MyForm(QDialog):
    def __init__(self):
        super().__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.pushButtonStart.clicked.connect(self.updateBar)
        self.show()
    def updateBar(self):
        x = 0
        while x < 100:
            x += 0.0001
            self.ui.progressBar.setValue(x)
if __name__=="__main__":
    app = QApplication(sys.argv)
    w = MyForm()
    w.show()
    sys.exit(app.exec_())

它是如何工作的...

在callProgressBar.pyw文件中,因为我们想要进度条在按下按钮时显示它的进度,进度条的clicked()事件与updateBar()方法相关联,因此当按钮按下时,就会调用updateBar()方法。在updateBar()方法中,使用了一个从0到100的while循环。使用一个变量x,并初始化为0。在每一个循环的迭代中,x的值都会增加0.0001。变量x中的值将被用于进度条的更新上。也就是说,在每一个循环的迭代中,都会增加x的值并且x的值被用于更新进度条。因此,进度条的进度将会从0%并持续增长直到100%。