pyqt5学习笔记(七)

时间:2022-04-22 08:35:20

QProgressBar

简述

QProgressBar部件提供了一个水平或垂直进度条。

进度条用于给用户操作一个进度指示,并向它们说明应用程序仍在运行。

预备知识

常用方法

-* setRange()*

设置进度值的范围。

  • setOrientation()

设置进度条的行进方向。
1. Qt.Horizontal – 水平方向。
2. Qt.Vertical —– 垂直方向。

  • setInvertedAppearance()

设置进度条的行进方向,如果参数是True,行进方向与默认方向相反。

  • setTextVisible()

选择是否显示进度条上的文本。

  • setFormat()

用于生成当前文本字符串。

  1. %p - 被完成百分比所取代
  2. %v - 被当前值所取代
  3. %m - 被总步数所取代
    • 默认值是 “%p%”。
  • setValue()

设置当前的运行值

  • reset()

让进度重新开始

  • setMinimum()
  • setMaximum()

如果都设置为0, 进度条会显示一个繁忙指示, 而不会显示当前的值。
pyqt5学习笔记(七)

百分比计算公式

result = (value() - minimum()) / (maximum() - minimum())

QBasicTimer

QBasicTimer类为对象提供计时器事件。
这是Qt内部使用的一个快速,轻量级和低级别的类。注意这个定时器是一个重复的定时器,除非调用stop()函数,否则它将发送后续的定时器事件。当定时器超时时,它将向QObject子类发送一个timer事件。定时器可以随时stop()。

self.timer.start(100, self)

启动计时器, 调用start()方法,两个参数,超时时间(毫秒级),和接受事件的对象。

    def timerEvent(self, e):
        if self.step >= 100:
            self.timer.stop()
            QMessageBox.information(self, "提示", "完成")
            self.bt2.setText("再来一次")
            self.step = 0
            return

        self.step += 1
        self.pb5.setValue(self.step)
        self.pb6.setValue(self.step)
  • 如果大于100, 计时器就停止。
  • 如果小于100, 进度条前进。
    def inner(self):
        if self.timer.isActive():
            self.timer.stop()
            self.bt2.setText("继续")
        else:
            self.timer.start(100, self)
            self.bt2.setText("停止")
  • 我们先判断定时器是否为运行状态, 一开始是没有运行,执行了else部分的代码。
    pyqt5学习笔记(七)
  • 当我按下停止按钮时,定时器在运行状态,执行if部分的代码。
    pyqt5学习笔记(七)

代码

# -*- coding: utf-8 -*-
# @Date : 2018/6/4 19:28 
# @Author : yw 



import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.resize(600, 480)
        self.setWindowTitle("QProgressBar")

        # 外圈
        self.pb1 = QProgressBar(self)
        self.pb2 = QProgressBar(self)
        self.pb3 = QProgressBar(self)
        self.pb4 = QProgressBar(self)

        # 内圈
        self.pb5 = QProgressBar(self)
        self.pb6 = QProgressBar(self)

        self.pb1.setOrientation(Qt.Horizontal)      # 水平方向
        self.pb2.setOrientation(Qt.Vertical)        # 垂直方向
        self.pb3.setOrientation(Qt.Horizontal)
        self.pb4.setOrientation(Qt.Vertical)

        self.pb1.setGeometry(70, 40, 450, 20)
        self.pb2.setGeometry(480, 40, 20, 400)
        self.pb3.setGeometry(70, 420, 450, 20)
        self.pb4.setGeometry(70, 40, 20, 400)

        self.pb5.setGeometry(200, 100, 200, 20)
        self.pb6.setGeometry(200, 340, 200, 20)

        self.pb5.setFormat("%v")

        # 水平方向默认是从左至右 垂直方向默认从下至上
        # 设置为默认方向的反方向
        self.pb6.setInvertedAppearance(True)

        self.bt1 = QPushButton("外圈跑马灯", self)
        self.bt2 = QPushButton("内圈跑进度", self)

        self.bt1.move(230, 180)
        self.bt2.move(230, 250)
        self.show()

        self.timer = QBasicTimer()      # 创造一个定时器
        self.step = 0                   # 设置步长
        self.bt1.clicked.connect(self.running)
        self.bt2.clicked.connect(self.doaction)

    def timerEvent(self, e):
        if self.step >= 100:
            self.timer.stop()
            QMessageBox.information(self, "提示", "完成")
            self.bt2.setText("再来一次")
            self.step = 0
            return

        self.step += 1
        self.pb5.setValue(self.step)
        self.pb6.setValue(self.step)


    def doaction(self):
        if self.timer.isActive():
            self.timer.stop()
            self.bt2.setText("继续")
        else:
            self.timer.start(100, self)
            self.bt2.setText("停止")

    def running(self):
        self.pb1.setMinimum(0)
        self.pb1.setMaximum(0)

        self.pb2.setInvertedAppearance(True)
        self.pb2.setMinimum(0)
        self.pb2.setMaximum(0)

        self.pb3.setInvertedAppearance(True)
        self.pb3.setMinimum(0)
        self.pb3.setMaximum(0)

        self.pb4.setMinimum(0)
        self.pb4.setMaximum(0)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())