QProgressBar
简述
QProgressBar部件提供了一个水平或垂直进度条。
进度条用于给用户操作一个进度指示,并向它们说明应用程序仍在运行。
预备知识
常用方法
-* setRange()*
设置进度值的范围。
- setOrientation()
设置进度条的行进方向。
1. Qt.Horizontal – 水平方向。
2. Qt.Vertical —– 垂直方向。
- setInvertedAppearance()
设置进度条的行进方向,如果参数是True,行进方向与默认方向相反。
- setTextVisible()
选择是否显示进度条上的文本。
- setFormat()
用于生成当前文本字符串。
- %p - 被完成百分比所取代
- %v - 被当前值所取代
- %m - 被总步数所取代
- 默认值是 “%p%”。
- setValue()
设置当前的运行值
- reset()
让进度重新开始
- setMinimum()
- setMaximum()
如果都设置为0, 进度条会显示一个繁忙指示, 而不会显示当前的值。
百分比计算公式
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部分的代码。
- 当我按下停止按钮时,定时器在运行状态,执行if部分的代码。
代码
# -*- 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_())