当我们在处理一个好事较长的任务时,可能就会用到进度条部件。因为使用进度条可以形象告诉用户当前的人物正在进行中。PyQt4工具包提供了水平和垂直两种类型的进度条部件。我们可以设置进度条的最大和最小值,默认的最大和最小值分别是0和99。

#!/usr/bin/python
# -*- coding: utf-8 -*- import sys
from PyQt4 import QtGui, QtCore class ProgressBar(QtGui.QWidget):
def __init__(self, parent = None):
QtGui.QWidget.__init__(self, parent)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('ProgressBar') self.pbar = QtGui.QProgressBar(self)
self.pbar.setGeometry(30, 40, 200, 25) self.button = QtGui.QPushButton('Start', self)
self.button.setFocusPolicy(QtCore.Qt.NoFocus)
self.move(40, 80) self.connect(self.button, QtCore.SIGNAL('clicked()'), self.onStart)
self.timer = QtCore.QBasicTimer()
self.step = 0 def timerEvent(self, event):
if self.step >= 100:
self.timer.stop()
return
self.step += 1
self.pbar.setValue(self.step) def onStart(self):
if self.timer.isActive():
self.timer.stop()
self.button.setText('Start')
else:
self.timer.start(100, self)
self.button.setText('Stop') app = QtGui.QApplication(sys.argv)
icon = ProgressBar()
icon.show()
sys.exit(app.exec_())

效果:

在这个示例中,我们创建了一个水平的进度条和一个按钮。按钮用来启动或终止进度。

self.pbar = QtGui.QProgressBar(self)

使用该构造器来创建一个进度条。

self.timer = QtCore.QBasicTimer()

创建一个定时器对象。

self.timer.start(100, self)

要激活该进度条,我们需要使用定时器的start()方法启动定时器。该方法的第一个参数为超时时间。第二个参数表示当前超时时间到了以后定时器触发超时事件的接受对象。

def timerEvent(self, event):
        if self.step >= 100:
            self.timer.stop()
            return
        self.step += 1
        self.pbar.setValue(self.step)

每一个QObject对象或其子对象都有一个QObject.timerEvent方法。在本例中,为了响应定时器的超时事件,我们需要使用上面的代码重写进度条的timerEvent方法。

最新文章

  1. linux: 常用copy 命令
  2. CGContextRef 画线简单用法
  3. 【转】slice,substr和substring的区别
  4. 《你必须知道的.NET》书中对OCP(开放封闭)原则的阐述
  5. Resharper注册机实现以及源代码
  6. WebResource-asp.net自定义控件引用外部资源方法
  7. DOM&SAX解析XML
  8. BZOJ 1001 狼抓兔子
  9. Quiz 6a Question 7————An Introduction to Interactive Programming in Python
  10. angularJS 系列(七)---指令
  11. 解决浏览器不支持HTML5和CSS3
  12. Vue2 后台管理系统解决方案
  13. 网络编程-Mysql-1、数据库的启动关闭,创建数据库,表等基本操作
  14. android与c#之间scoket获取数据进行赋值显示的问题
  15. 敏捷开发、DevOps相关书籍——书单
  16. MyBatis Generator使用com.mysql.cj.jdbc.Driver遇到的问题
  17. SQL、SQL Server、MySQL与Oracle
  18. IntellJ IDEA javax.servlet.ServletException 找不到javax.servlet.ServletException的类 java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
  19. Javac语法糖之TryCatchFinally
  20. docker微服务部署之:四、安装docker、docker中安装mysql和jdk1.8、手动构建镜像、部署项目

热门文章

  1. Session过期后自动跳转到登录页面
  2. displaytag的Excel导出实践
  3. 【WPF】XAML引入资源和在C#代码中动态添加样式
  4. [4G]Linux平台上实现4G通信
  5. 课后作业——用lastIndexOf判断是否是字符串的最后一位
  6. m个苹果放在n个盘子里面有多少种放法?(动态规划)
  7. golang http.Redirect()函数容易误解的地方
  8. vlan pvid vid access口 trunk口
  9. ggplot饼图
  10. C#基础概念二十五问