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() 进度条的更多相关文章

  1. Qt flash_eraseall nandwrite 进度条显示擦除、烧录

    /***************************************************************************** * Qt flash_eraseall n ...

  2. Qt第三方圆形进度条-及其改进

    Qt第三方圆形进度条的改进 要实现一个圆形的进度条功能,在网上找到一个比较出名的第三方封装类:QRoundProgressBar,地址:sourceforge 的 QRoundProgressBar  ...

  3. PyQt5 & Qt Designer使用小结

    开始在知乎写文章的原因,主要还是想整理平时的经验,方便自己以后查看,有机会的话大家也可以交流吧. 11月中旬由于项目需要,和另一名实习生负责使用Python开发一个数据分析的小软件. 虽然才开始接触Q ...

  4. PyCharm+PyQt5+Qt Designer配置

    配置前提 因为本机已经配置完毕了,本次使用的是虚拟机中的Win7系统,Win10系统操作步骤完全一样,无任何区别 PyCharm (这个不多说,官网下载安装,我是用的是2019.3版本) Python ...

  5. 进度条QProgressBar

    import sys from PyQt5.QtCore import Qt, QTimer from PyQt5.QtWidgets import QApplication, QWidget, QP ...

  6. 【PyQt5-Qt Designer】制作炫酷的启动界面+进度条

    QProgressBar 进度条+QSplashScreen 启动界面 知识点: 1.进度条 #将进度条的最大值.最小值设置为相同时,产生跑马灯效果 self.progressBar.setMinim ...

  7. QT 进度条 QProgressDialog

    //默认构造函数 参数依次为,对话框正文,取消按钮名称,进度条范围,及所属 QProgressDialog *progressDlg=new QProgressDialog( QStringLiter ...

  8. 痞子衡嵌入式:超级好用的可视化PyQt GUI构建工具(Qt Designer)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是PyQt GUI构建工具Qt Designer. 痞子衡开博客至今已有好几年,一直以嵌入式开发相关主题的文章为主线,偶尔穿插一些其他技术 ...

  9. PyCharm+Qt Designer+PyUIC安装配置教程

    Qt Designer用于像VC++的MFC一样拖放.设计控件 PyUIC用于将Qt Designer生成的.ui文件转换成.py文件 Qt Designer和PyUIC都包含在PyQt5中,所以我们 ...

随机推荐

  1. Unity5 AssetBundle系列——简单的AssetBundleManager

    一个AssetBundle同时只能加载一次,所以实际使用中一般会伴随着AssetBundle包的管理. 下面是一个简单的AssetBundle管理器,提供了同步和异步加载函数: using Unity ...

  2. hdoj:2037

    #include <iostream> using namespace std; struct Time { int start; int end; }; Time times[]; ]; ...

  3. Threads vs. Tasks

    Posted on Friday, October 11, 2013 .Net has three low-level mechanisms to run code in parallel: Thre ...

  4. SSM框架搭建教程(从零开始,图文结合)

    1.准备 IntelliJ IDEA Tomcat JDK Maven mysql spring.springmvc.mybatis 了解 现在假设如上条件你都具备,那么通过我这篇博客 你一定可以整合 ...

  5. 求教如何在win7 X64系统上安装.net 3.5 sp1

    其实win7系统已自带net 3.5.1了.开始菜单——控制面板——程序——打开或关闭windows功能,找到Microsoft .NET Framework 3.5.1,去掉选项,确定.然后再进入“ ...

  6. IntelliJ IDEA出现Search for无法进入编辑状态

    今天由于多次修改系统时间,然后又进行查询,导致IntelliJ IDEA一直处于Search for,无法修改代码 原因: 可能是在不正确的系统时间启动的IDEA,然后启动完成后又把时间改成正确的 解 ...

  7. docker中,如何将镜像保存为tar文件或者将镜像保存为文件,将tar文件导入到docker中

    需求说明: 在实际使用docker的过程中,比如某些机器不能上网,恰巧需要某些docker镜像,一般可以采用在能上网的机器上,pull下来基础镜像,然后将docker 镜像保存为文件,在不能上网的机器 ...

  8. 分辨率,PPi,DPI,DPR,物理像素,逻辑像素

    屏幕尺寸:指的是屏幕对角线的长度 分辨率:是指宽度上和高度上最多能显示的物理像素点个数 点距:像素与像素之间的距离,点距和屏幕尺寸决定了分辨率大小 PPI:屏幕像素密度,即每英寸(1英寸=2.54厘米 ...

  9. 中文数据解码报错 UnicodeDecodeError: 'gbk' codec can't decode bytes in position 2-3: illegal multibyte sequence

    UnicodeDecodeError: 'gbk' codec can't decode bytes in position 2-3: illegal multibyte sequence 失败原因: ...

  10. iOS(WKWebView)OC与JS交互 之三

      随着H5功能愈发的强大,没进行过混合开发的小伙们都不好意思说自己能够独立进行iOS的app开发,在iOS7操作系统下,常用的native,js交互框架有easy-js,WebViewJavascr ...