当我们在处理一个好事较长的任务时,可能就会用到进度条部件。因为使用进度条可以形象告诉用户当前的人物正在进行中。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方法。