PyQt5:QProgressBar进度条(26)

时间:2022-12-15 23:02:14

学习《PyQt4入门指南 PDF中文版.pdf 》笔记

PyQt5:QProgressBar进度条(26)

当我们在处理一个耗时较长的任务时,可能就会用到进度条部件。因为使用进度条可以形象告诉用户当前的任务正在进行中。PyQt5工具包提供了水平和垂直两种类型的进度条部件。我们可以设置进度条的最大和最小值,默认的最大和最小值分别为0和99。

<span style="font-size:12px;">#!/usr/bin/python
# progressbar.py

from PyQt5.QtWidgets import QApplication, QProgressBar, QPushButton
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt, QBasicTimer

class ProgressBar(QtWidgets.QWidget):
    def __init__(self, parent= None):
        QtWidgets.QWidget.__init__(self)
        
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('ProgressBar')
        self.pbar = QProgressBar(self)
        self.pbar.setGeometry(30, 40, 200, 25)
        
        self.button = QPushButton('Start', self)
        self.button.setFocusPolicy(Qt.NoFocus)
        self.button.move(40, 80)
        
        self.button.clicked.connect(self.onStart)
        self.timer = QBasicTimer()
        self.step = 0
        
    def timerEvent(self, event):
        if self.step >=100:
            self.timer.stop()
            return
        self.step = self.step + 1
        self.pbar.setValue(self.step)
        
    def onStart(self):
        if self.timer.isActive(): 
            self.timer.stop()
            self.button.setText('Start')
        else:
            self.timer.start(100, self)
            self.button.setText('Stop')
        

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    qb = ProgressBar()
    qb.show()
    sys.exit(app.exec_())</span>

在这个示例中,我们创建了一个水平的进度条和一个按钮。按钮用来启动或终止进度。

         self.pbar= QProgressBar(self)

         创建一个进度条。

         self.timer= QBasicTimer()

         创建一个定时器对象。

         self.timer.start(100,self)

         需要激活该进度条,我们需要使用定时器的start()方法启动定时器。该方法的第一个参数为超时时间。第二个参数表示当前超时时间到了以后定时器触发超时事件的接受对象。

         def  timerEvent(self, event):

                   if self.step >=100:

                           self.timer.stop()

                           return

                   self.step = self.step + 1

                   self.pbar.setValue(self.step)

         每一个QObject对象或其子对象都有一个QObject.timerEvent方法。在本实例中,为了响应定时器的超时事件,我们需要使用上面的代码重写进度条的timerEvent方法。