【PyQt5-Qt Designer】QProgressBar() 进度条
QProgressBar() 进度条
QProgressBar简介
QProgressBar小部件提供了一个水平或垂直的进度条。
进度条用于向用户指示操作的进度,并向他们保证应用程序仍在运行。
进度条使用steps的概念。您可以通过指定最小和最大可能的step值来设置它,并且当您稍后将当前step值赋给它时,它将显示已经完成的step的百分比。百分比是通过将进度 (value() - minimum()) / (maximum() - minimum())来计算的。
您可以使用setMinimum()和setMaximum()指定最小和最大steps。默认值是0和99。当前的step由setValue()设置。进度条可以通过reset()重新开始。
如果最小值和最大值都设置为0,那么栏会显示一个繁忙的指示符,而不是步骤的百分比。例如,在使用QNetworkAccessManager下载项目时,这是非常有用的,因为他们无法确定正在下载的项目的大小。
详见官网介绍:QProgressBar Class
QProgressBar小例子
今天的小例子的完成效果如下:

可能会有卡顿的情况,请大家忽视这个细节,主要是因为在虚拟机录制,而宿主机配置较低,所以就那样了,实际运行还是很流畅的。
效果如下:
参考:
https://zhuanlan.zhihu.com/p/31109561
完整代码:
from PyQt5.QtWidgets import (QApplication,QWidget,QMessageBox,QGridLayout,QPushButton,QProgressBar)
from PyQt5.QtCore import Qt,QBasicTimer
from PyQt5.QtGui import QPixmap
import sys class Example(QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI() def initUI(self):
self.setGeometry(300,300,400,400)
self.setWindowTitle("QProgressBar进度条")
gridLayout = QGridLayout()
self.btn1 = QPushButton("外圈跑马灯")
self.btn2 = QPushButton("内圈跑马灯")
self.pb11 = QProgressBar()
self.pb12 = QProgressBar()
self.pb13 = QProgressBar()
self.pb14 = QProgressBar()
self.pb21 = QProgressBar()
self.pb22 = QProgressBar()
self.pb11.setOrientation(Qt.Vertical)
self.pb12.setOrientation(Qt.Horizontal)
self.pb13.setOrientation(Qt.Vertical)
self.pb14.setOrientation(Qt.Horizontal)
self.pb21.setOrientation(Qt.Horizontal)
self.pb22.setOrientation(Qt.Horizontal)
gridLayout.addWidget(self.pb11,0,0,6,1)
gridLayout.addWidget(self.pb12,0,1,1,6)
gridLayout.addWidget(self.pb13,0,6,6,1)
gridLayout.addWidget(self.pb14,5,1,1,6)
gridLayout.addWidget(self.pb21,1,2,1,4)
gridLayout.addWidget(self.btn1,2,3,1,1)
gridLayout.addWidget(self.btn2,3,3,1,1)
gridLayout.addWidget(self.pb22,4,2,1,4)
self.setLayout(gridLayout) self.timer = QBasicTimer()
self.step = 0
self.pb21.setFormat("%v")
self.pb22.setInvertedAppearance(True)
self.btn1.clicked.connect(self.running)
self.btn2.clicked.connect(self.doAction) def running(self):
self.pb11.setMinimum(0)
self.pb11.setMaximum(0)
self.pb12.setMinimum(0)
self.pb12.setMaximum(0)
self.pb13.setMinimum(0)
self.pb13.setMaximum(0)
self.pb13.setInvertedAppearance(True)
self.pb14.setMinimum(0)
self.pb14.setMaximum(0)
self.pb14.setInvertedAppearance(True) def timerEvent(self, e):
if self.step >= 100:
self.timer.stop()
QMessageBox.information(self,"信息提示框","内圈进度收工了!")
self.btn2.setText("再来一次吧!")
self.step = 0
return
self.step = self.step + 1
self.pb21.setValue(self.step)
self.pb22.setValue(self.step) def doAction(self):
if self.timer.isActive():
self.timer.stop()
self.btn2.setText("继续")
else:
self.timer.start(100,self)
self.btn2.setText("停止") if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
QProgressBar进度条案例
这个例子当中我们做了一个跑马灯,其实就是看起来像。然后中间再做了一个正常点的进度条。
selfs .pb11.setOrientation(Qt.Horizontal)
self.pb12.setOrientation(Qt.Vertical)
self.pb13.setOrientation(Qt.Horizontal)
self.pb14.setOrientation(Qt.Vertical)
进度条是可以设置方向的,你可以选择垂直或是水平。这里我们通过垂直和水平方式建立了一个跑马圈。
QProgressBar.setOrientation()该属性设置了进度条的方向,方向必须是Qt.Horizontal(默认,水平)或Qt.Vertical(垂直)。
self.pb21.setFormat("%v")
不知道大家仔细看没有,圈内的进度条上面的指示数字是不一样的,例如:
QProgressBar.setFormat()属性包含用于生成当前文本的字符串
- %p - 被完成的百分比取代
- %v - 被当前值替换
- %m - 被总step所取代
- 默认值是”%p%”
self.pb22.setInvertedAppearance(True)
我们知道进度条可以向左向右前进(以水平进度条为例),这个就是通过QProgressBar.setInvertedAppearance()来设置的。如果这个属性为真,则进度条向另一个方向增长(例如从右向左)。 默认情况下,进度条从左到右(水平进度条)。

self.timer = QBasicTimer()
要激活进度条,我们使用一个计时器对象。
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.b2.setText('再来一次')
self.step = 0
return self.step = self.step + 1
self.pb21.setValue(self.step)
self.pb22.setValue(self.step)
每个QObject及其子类都有一个timerEvent()事件处理程序。 为了对计时器事件作出反应,我们重新实现事件处理程序。
- 总step<100的话,就自加,从图形上看就是进度条再前进。
- 总step>100的话,定时器停止,setp重置为0。
QProgressBar.setValue()该属性设置进度条的当前值,value值不停地增加,进度就在增加。
def doaction(self):
if self.timer.isActive():
self.timer.stop()
self.b2.setText('继续')
else:
self.timer.start(100, self)
self.b2.setText('停止')
在doaction()方法内部,我们启动和停止定时器。isActive()如果定时器正在运行且尚未停止,则返回True;否则返回False。
因为最开始定时器是没有运行, 所以会执行self.timer.start(100,self)语句;当再次按下按钮时候,定时器已经运行,所以会执行self.timer.stop()语句,将定时器停止。自然也不会去执行timerEvent()中的内容了。
def running(self):
self.pb11.setMinimum(0)
self.pb11.setMaximum(0)
...
就像之前讲的那样,如果最小值和最大值都设置为0,那么栏会显示一个繁忙的指示符,而不是步骤的百分比。所以就模拟成了跑马灯。
【PyQt5-Qt Designer】QProgressBar() 进度条的更多相关文章
- Qt flash_eraseall nandwrite 进度条显示擦除、烧录
/***************************************************************************** * Qt flash_eraseall n ...
- Qt第三方圆形进度条-及其改进
Qt第三方圆形进度条的改进 要实现一个圆形的进度条功能,在网上找到一个比较出名的第三方封装类:QRoundProgressBar,地址:sourceforge 的 QRoundProgressBar ...
- PyQt5 & Qt Designer使用小结
开始在知乎写文章的原因,主要还是想整理平时的经验,方便自己以后查看,有机会的话大家也可以交流吧. 11月中旬由于项目需要,和另一名实习生负责使用Python开发一个数据分析的小软件. 虽然才开始接触Q ...
- PyCharm+PyQt5+Qt Designer配置
配置前提 因为本机已经配置完毕了,本次使用的是虚拟机中的Win7系统,Win10系统操作步骤完全一样,无任何区别 PyCharm (这个不多说,官网下载安装,我是用的是2019.3版本) Python ...
- 进度条QProgressBar
import sys from PyQt5.QtCore import Qt, QTimer from PyQt5.QtWidgets import QApplication, QWidget, QP ...
- 【PyQt5-Qt Designer】制作炫酷的启动界面+进度条
QProgressBar 进度条+QSplashScreen 启动界面 知识点: 1.进度条 #将进度条的最大值.最小值设置为相同时,产生跑马灯效果 self.progressBar.setMinim ...
- QT 进度条 QProgressDialog
//默认构造函数 参数依次为,对话框正文,取消按钮名称,进度条范围,及所属 QProgressDialog *progressDlg=new QProgressDialog( QStringLiter ...
- 痞子衡嵌入式:超级好用的可视化PyQt GUI构建工具(Qt Designer)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是PyQt GUI构建工具Qt Designer. 痞子衡开博客至今已有好几年,一直以嵌入式开发相关主题的文章为主线,偶尔穿插一些其他技术 ...
- PyCharm+Qt Designer+PyUIC安装配置教程
Qt Designer用于像VC++的MFC一样拖放.设计控件 PyUIC用于将Qt Designer生成的.ui文件转换成.py文件 Qt Designer和PyUIC都包含在PyQt5中,所以我们 ...
随机推荐
- 9patch图的尺寸尽量为偶数
美工做了一张.9的背景图,宽度110*80 像素,描点如下: 放到720p的智能电视上观看,总感觉怪怪的.仔细观看可以发现,前景图总是不能完全的覆盖掉背景图.总有那么一个像素的点多余出来,如图所示: ...
- 教你一招:修复win7 系统自带的截图工具损坏
这个问题经常见,原因是注册表没有导入. 修复很简单. 打开资源管理器,在C盘中搜索到 tpcps.dll ,在其中选一个右击,选择注册dll,然后截图工具就被修复了. 有时候便签也会出现类似问题,方法 ...
- iTunes空间不足无法备份iphone的问题
因为换手机,需要把旧iphone备份出来,在新iphone上恢复.使用mac进行备份时总是提示iTunes无法备份,所用电脑空间不够,即使有个用空间的移动硬盘也无法备份.网上的方法都是说修改iTune ...
- 使用UIScrollView 结合 UIImageView 实现图片循环滚动
场景: 在开发工作中,有时我们需要实现一组图片循环滚动的情况.当我们使用 UIScrollView 结合 UIImageView 来实现时,一般 UIImageView 会尽量考虑重用,下面例子是以( ...
- yum安装VirtualBox
参考官方文档: https://www.virtualbox.org/wiki/Linux_Downloads 配置yum源: vim /etc/yum.repos.d/virtualbox.repo ...
- day_5.14 py 飞机大战Demo
飞机未完,继续做 2018-5-14 21:05:45 明天继续 循环里面的坑; 删除列表元素后循环了打印的不一样,主要是比如相邻的删除了,33,44 删除33 循环一次后44跑到33位置 ...
- 淘宝Tengine 2.1.2 稳定版(nginx/1.6.2) Centos 6.5安装教程
淘宝Tengine 2.1.2 稳定版(nginx/1.6.2) Centos 6.5 安装教程 Tengine 简介: Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大 ...
- python 中 try ...except
捕捉异常 try: 下的代码段 即为 需要捕捉异常的代码段: except: 捕获某一模块的异常,须带异常模块名称,可带原因参数:except 下代码为该异常发生时,所执行的代码:一个try可对应多 ...
- js中if语句的几种优化代码写法
UglifyJS是一个对javascript进行压缩和美化的工具,在它的文档说明中,我看到了几种关于if语句优化的方法. 一.使用常见的三元操作符 复制代码 代码如下: if (foo) bar(); ...
- day1 一、编程语言与计算机五大组成部分
一.编程与编程语言 1.什么是编程语言 语言是一个事物与另一个事物沟通的介质. 编程语言是程序员与计算机沟通的介质. 2.什么是编程 编程就是程序员按照某种编程的语法规范将自己想让计算机做的事情表达出 ...