Qt and progressBar - how to update
OMS
omsdiver at gmail.com
Sun May 16 14:28:38 EDT 2010
I am quite new to Python and Qt and need very urgently advice on how
to update Qt progressBar while executing a process. I have went thrugh
number of 'google' stuff and saw different solution, hence none worked
for me. The best idea I have seen is the usage of QThread and emiting
signal from thread to MainWindow. I do not know however why the code I
have written is not working. Most likely a stupid 'beginner related'
error but as far as I am beginner I can't get it. There is a code
below:
#!/opt/local/bin/python2.6
import os
import sys
import time
from PyQt4 import QtCore
from PyQt4 import QtGui
from uiTest import Ui_MainWindow
class MainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.ui=Ui_MainWindow()
self.ui.setupUi(self)
self.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"),
self.runWorker)
def runWorker(self):
self.worker = Worker()
self.connect(self.worker, QtCore.SIGNAL("progressUpdated"),
self.updateWorkerProgress)
self.worker.start()
def updateWorkerProgress(self, min, max, progress):
self.ui.progressBar.setMinimum = min
self.ui.progressBar.setMaximum = max
self.ui.progressBar.setValue = progress
self.ui.progressBar.repaint()
#print min, progress, max
class Worker(QtCore.QThread):
__pyqtSignals__ = ("progressUpdated")
def __init__(self):
QtCore.QThread.__init__(self)
self.min = 0
self.max = 1000
self.progress = 0
def run(self):
for self.progress in range(self.min, self.max):
self.emit(QtCore.SIGNAL("progressUpdated"), self.min,
self.max, self.progress)
time.sleep(0.005)
def main():
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
the uiTest is generated by pyuic4 and for reference can be found
below:
# Form implementation generated from reading ui file 'test.ui'
#
# Created: Sun May 16 19:54:59 2010
# by: PyQt4 UI code generator 4.7.2
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(640, 480)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtGui.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(40, 40, 113, 32))
self.pushButton.setObjectName("pushButton")
self.progressBar = QtGui.QProgressBar(self.centralwidget)
self.progressBar.setGeometry(QtCore.QRect(50, 80, 431, 23))
self.progressBar.setProperty("value", 24)
self.progressBar.setObjectName("progressBar")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 22))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow",
"MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("MainWindow",
"PushButton", None, QtGui.QApplication.UnicodeUTF8))
More information about the Python-list
mailing list