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