Barra de progreso con pyqt

Tengo un progtwig que ejecuta muchos subprocesos, uno de ellos controla la interfaz y otro ejecuta algunas funciones cada pocos segundos. Quiero que el hilo de tiempo actualice la compra de una barra de progreso cuando lo haga, obtengo:

X Error: RenderBadGlyphSet (invalid GlyphSet parameter) 165 Extension: 150 (RENDER) Minor opcode: 25 (RenderCompositeGlyphs32) Resource id: 0x25 X Error: RenderBadGlyphSet (invalid GlyphSet parameter) 165 Extension: 150 (RENDER) Minor opcode: 25 (RenderCompositeGlyphs32) Resource id: 0x25 X Error: RenderBadGlyphSet (invalid GlyphSet parameter) 165 Extension: 150 (RENDER) Minor opcode: 25 (RenderCompositeGlyphs32) Resource id: 0x25 X Error: RenderBadGlyphSet (invalid GlyphSet parameter) 165 Extension: 150 (RENDER) Minor opcode: 25 (RenderCompositeGlyphs32) Resource id: 0x25 QPixmap: It is not safe to use pixmaps outside the GUI thread QPixmap: It is not safe to use pixmaps outside the GUI thread 

Aquí está mi código:

 #!/usr/bin/python from PyQt4 import QtCore, QtGui import time class WTrainning(wMeta.WMeta, QtGui.QWidget): def __init__(self): super(WTrainning, self).__init__() def createUI(self): ... self.progressBar = QtGui.QProgressBar(self) self.progressBar.setGeometry(QtCore.QRect(30, 70, 481, 23)) self.progressBar.setProperty("value", 24) self.progressBar.setObjectName("progressBar") QtCore.QObject.connect(self.progressBar, QtCore.SIGNAL("valueChanged(int)"), self.progressBar.setValue) ... def modifyBarr(self, number): self.progressBar.setValue(number) class Crono(QtCore.QThread): def __init__(self, parent): QtCore.QThread.__init__(self,parent) def checkStatus(self): for x in range(1,101): self.wtobject.modifyBarr(x) time.sleep(1) 

Probé con señales (versión nueva y antigua) y hice un subproceso dedicado para actualizar la interfaz de usuario, pero nada funcionó. Estoy usando python 2.6.6 y pyqt 4.7.4

Related of "Barra de progreso con pyqt"

Tienes que definir una señal para el objeto Crono así:

 class Crono(QtCore.QThread): tick = QtCore.pyqtSignal(int, name="changed") #New style signal def __init__(self, parent): QtCore.QThread.__init__(self,parent) def checkStatus(self): for x in range(1,101): self.tick.emit(x) time.sleep(1) 

A continuación, conectarlo a una ranura de la barra de progreso.

 class WTrainning(wMeta.WMeta, QtGui.QWidget): def __init__(self): super(WTrainning, self).__init__() self.crono = Crono() def createUI(self): #Create GUI stuff here #Connect signal of self.crono to a slot of self.progressBar self.crono.tick.connect(self.progressBar.setValue) 

Lo que estaba haciendo es conectar el valor de SEÑAL valueChanged de la valueChanged de progreso a su propio valor de SLOT setValue