PyQt5 QProgressBar(进度条) 学习

2020-04-04  本文已影响0人  _Mirage

A progress bar is a widget that is used when we process lengthy tasks. It is animated so that the user knows that the task is progressing. The QProgressBar widget provides a horizontal or a vertical progress bar in PyQt5 toolkit. The programmer can set the minimum and maximum value for the progress bar. The default values are 0 and 99.
我们可以将其用在下载进度中,可以形象的看到一个任务下载到什么程度了。
我们也可以手动设置进度条的最小值和最大值(默认是0-->99)

代码:

# coding='utf-8'

from PyQt5.QtWidgets import QApplication, QWidget,\
    QProgressBar, QPushButton
from PyQt5.QtCore import QBasicTimer
import sys


class Gui(QWidget):
    def __init__(self):
        super(Gui, self).__init__()
        self.start()

    def start(self):
        # 创建父组件是QWidget(主窗体)的进度条
        self.progress_bar = QProgressBar(self)
        self.progress_bar.setGeometry(30, 40, 100, 25)

        # 创建内容是'开始',父组件是QWidget的按钮
        self.button = QPushButton('开始', self)
        # 将信号clicked与槽self.do相连
        self.button.clicked.connect(self.do)
        self.button.move(40, 80)

        # 创建计时器
        # 计时器的构造函数:
        """
            QBasicTimer()
            QBasicTimer(QBasicTimer)
        """
        self.timer = QBasicTimer()
        # 计时器的初始值设为0
        self.step = 0

        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('进度条')
        self.show()

    def do(self):
        # 判断进度条是否完成,完成则关闭窗体
        if self.button.text() == '完成':
            self.close()
        # 判断计数器是否处于计数状态(没停止)
        if self.timer.isActive():
            # 停止计数
            self.timer.stop()
            self.button.setText('开始')
        else:
            # 如果按了按钮后发现计数器是停止状态\
            #  (刚开始的状态就是停止状态)的: 就让计数器继续计数
            # timer.start的两个参数:\
                # 第一个:timeout表示计数器最高阈值是100
                # 第二个:QObject表示是哪个对象会接受这个timer事件
            self.timer.start(100, self)
            self.button.setText('停止')

    # 这个是重写QWidget的方法,这个方法会一直触发
    def timerEvent(self, e) -> None:
        # 如果计时器的数值达到了100,就认为进度条满了,\
        #   因为进度条默认值是0-99
        if self.step >= 100:
            # 让计时器停下来
            self.timer.stop()
            # 进度条完成后给按钮设置为'完成'
            self.button.setText('完成')
            return
        # 如果计时器的还在计数
        self.step += 1
        # 就把计数器增加后的值设置成进度条的值,然后进度条就会动了,\
        #             注意这里进度条用的值是默认的0-->99
        self.progress_bar.setValue(self.step)


app = QApplication(sys.argv)
gui = Gui()
sys.exit(app.exec_())

运行结果: image.png
image.png
image.png
上一篇下一篇

猜你喜欢

热点阅读