进度条的使用

  Qt 提供了两种显示进度条的方式,一种是 QProgressBar,另一种是 QProgressDialog,QProgressBar 类提供了种横向或纵向显示进度条的控件表示方式,用来描述任务的完成情况。 QProgressDialog 类提供了一种针对慢速过程的进度对话框表示方式, 用于描述任务完成的进度情况。标准的进度条对话框包括一个进度显示条,一个取消按钮以及一个标签。

  QProgressBar 有几个重要的属性值,minimum,maximum 决定进度条提示的最小值和最大值,format 决定进度条显示文字的格式,可以有 3 种显示格式:%p%,%v,%m。%p%显示完成的百分比,这是默认显示方式;%v 显示当前的进度值;%m 显示总的步进值。invertedAppearance 属性可以让进度条以反方向显示进度。

  QProgressDialog 也有几个重要的属性值,决定了进度条对话框何时出现,出现多长时间,分别是 minimum,maximum 和 minimumDuration。minimum 和 maximum 分别表示进度条的最小值和最大值,决定了进度条的变化范围,minimumDuration 为进度条对话框出现前的等待时间。 系统根据所需完成的工作量估算一个预计花费的时间, 若大于设定的等待时间minimumDuration, 则出现进度条对话框;若小于设定的等待时间, 则不出现进度条对话框。

  进度条使用了一个步进值的概念, 即一时设置好进度条的最大值和最小值, 进度条将会显示完成的步进值占总的步进值的百分比,百分比的计算公式为:

  百分比=(value()-minimum())/(maximum()-minimum())

代码:

 1 #coding: utf-8
 2 from PyQt4.QtCore import *
 3 from PyQt4.QtGui import *
 4 import sys
 5
 6 QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))
 7
 8 class Progess(QDialog):
 9     def __init__(self, parent=None):
10         super(Progess, self).__init__(parent)
11         self.setWindowTitle(self.tr("进度条"))
12         numLabel = QLabel(self.tr("文件数目"))
13         self.numLineEdit = QLineEdit("10")
14         typeLabel = QLabel(self.tr("显示类型"))
15         self.typeComboBox = QComboBox()
16         self.typeComboBox.addItem(self.tr("进度条"))
17         self.typeComboBox.addItem(self.tr("进度对话框"))
18
19         self.progressBar = QProgressBar()
20
21         startPushButton = QPushButton(self.tr("开始"))
22
23         layout = QGridLayout()
24         layout.addWidget(numLabel, 0, 0)
25         layout.addWidget(self.numLineEdit, 0, 1)
26         layout.addWidget(typeLabel, 1, 0)
27         layout.addWidget(self.typeComboBox, 1, 1)
28         layout.addWidget(self.progressBar, 2, 0, 1, 2)
29         layout.addWidget(startPushButton, 3, 1)
30         layout.setMargin(15)
31         layout.setSpacing(10)
32
33         self.setLayout(layout)
34
35         self.connect(startPushButton, SIGNAL("clicked()"), self.slotStart)
36
37
38     def slotStart(self):
39         num = int(self.numLineEdit.text()) #获得当前需要复制的文件数目,这里对应进度条的总的步进值
40         #采用进度条的方式显示进度
41         if self.typeComboBox.currentIndex() == 0:
42             self.progressBar.setMinimum(0)
43             self.progressBar.setMaximum(num)
44
45             for i in range(num):
46                 self.progressBar.setValue(i)
47                 QThread.msleep(100)
48         #采用进度对话框的方式显示进度
49         elif self.typeComboBox.currentIndex() == 1:
50             progressDialog = QProgressDialog(self) #创建一个进度对话框
51             progressDialog.setWindowModality(Qt.WindowModal) #设置进度对话框采用模态方式进行显示,即显示进度的同时,其他窗口将不响应输入信号。
52             progressDialog.setMinimumDuration(5) #设置进度对话框出现等待时间,此处设定为 5 秒,默认为 4 秒
53             progressDialog.setWindowTitle(self.tr("请等待"))
54             progressDialog.setLabelText(self.tr("拷贝..."))
55             progressDialog.setCancelButtonText(self.tr("取消"))
56             progressDialog.setRange(0, num)
57             #在实际中使用文件复制过程来替换, 进度条的总的步进值为需要复制的文件数目,
58             # 当复制完一个文件后,步进值增加 1,这里需要使用 processEvents()来正常响应事件循环,
59             # 以确保应用程序不会出现阻塞。
60             for i in range(num):
61                 progressDialog.setValue(i)
62                 QThread.msleep(100)
63                 if progressDialog.wasCanceled(): #检测“取消”按钮是否被触发,若触发则退出循环并关闭进度对话框,在实际中,此处还需进行相关的清理工作
64                     return
65
66 app = QApplication(sys.argv)
67 proressbar = Progess()
68 proressbar.show()
69 app.exec_()

进度对话框的使用有两种方法, 即模态方式与非模态方式。 本实例中使用的是模态方式,模态方式的使用比较简单方便,但必须使用 processEvents 来使事件循环保持正常进行状态,从而确保应用不会阻塞。若使用非模态方式,则需要通过 QTime 来现定时设置进度条的值。

时间: 2024-08-25 07:32:16

进度条的使用的相关文章

Android 从无到有打造一个炫酷的进度条效果

从无到有打造一个炫酷的进度条效果

每周进度条(第十五周)

第十五周进度条   第十五周 所花时间 1h 代码量(行)  100 博客量(篇)  1 学到的知识 对图片的处理 在Android程序中加入图片

Bootstrap进度条

Bootstrap 进度条使用 CSS3 过渡和动画来获得该效果.Internet Explorer 9 及之前的版本和旧版的 Firefox 不支持该特性, Opera 12 不支持动画. 默认的进度条 创建一个基本的进度条的步骤如下: 添加一个带有 class .progress 的 <div>. 接着,在上面的 <div> 内,添加一个带有 class .progress-bar 的空的 <div>. 添加一个带有百分比表示的宽度的 style 属性,例如 sty

HTML5/CSS3超酷进度条 不同进度多种颜色

下面我们来看看实现这款进度条的过程和源码,代码主要由HTML.CSS以及jQuery组成,实现过程也相对比较简单.HTML代码: <div id="wrapper">     <div class="loader-container">           <div class="meter">0</div>           <span class="runner"&g

基于HT for Web矢量实现HTML5文件上传进度条

在HTML中,在文件上传的过程中,很多情况都是没有任何的提示,这在体验上很不好,用户都不知道到时有没有在上传.上传成功了没有,所以今天给大家介绍的内容是通过HT for Web矢量来实现HTML5文件上传进度条,矢量在<矢量Chart图表嵌入HTML5网络拓扑图的应用>一文中已经讲述了关于setCompType()方法的应用,今天我们用setImage()方法充分利用系统中定义好的矢量资源来实现文件上传进度条,我们先来看下效果图: 从效果图可以看到,向服务器上传了一个mp4文件,并在最下方显示

Android的下拉刷新带进度条效果

首先看一下运行效果图,程序的下拉刷新参考了视频,在视频页面也提供了源码下载, http://www.imooc.com/learn/135 本篇主要说在此基础上增加了进度条的快速旋转和递增递减处理,在文章最后也会给出源码,这里主要描述一下所用的一个类 RoundProgressBar package com.cayden.listview; import android.content.Context; import android.content.res.TypedArray; import

【WebView】带加载进度条的WebView及Chrome联调

先看效果图: 看到顶部蓝色的进度条了. 原理:用到了 android.webkit.WebChromeClient中的onProgressChanged,而android.webkit.WebViewClient是没有这个方法的.所以普通的WebView是无法实现进度条的. 下面直接上干货: /** * ProgressWebView * * @author lif * * */ @SuppressWarnings("deprecation") public class Progres

OpenCV GUI基本操作,回调函数,进度条,裁剪图像等

代码为转载,出处找不到了,不贴了 工具条进度条: // ConvertColor.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #pragma comment(lib,"opencv_core2410d.l

python 进度条

功能说明:将程序的执行进展情况按照百分比用进度条显示. print:打印末尾会自动加上换行符'\n',如果要让打印的结果一直在同一行显示,不能使用这个命令 sys.stdout.write():打印输出但结尾不带'\n',使输出一直在同一行,同时在末尾加上行首符'\r',将最新的输出结果一直保持在行首 sys.stdout.flush():将缓存在sys.stdout.write()的内容暂时打印出来 #!/usr/bin/env python # -*- coding:utf-8 -*- im

eclipse进度条从后台还原到前台

Eclipse在运行长时间任务时一般会有进度条提示,如下所示: 在上图所示的进度条对话框中,点击"Run in Background"会将本次运行的进度以后台方式运行,当前进度条对话框被隐藏,下次重新运行时,还是以前台(进度条对话框)的方式运行:如果选中"Always Run in background",则本次运行会转入后台,以后的运行也在后台.要想恢复前台运行,需要到Eclipse的首选项进行设置. 选择菜单栏Window-->Preferences--&