class MyWindow(QMainWindow): @pyqtSlot(int) def updateProgress(self, value): self.lblProgress=str(value) class ProcessorThread(QThread): def __init__(self, myWindow): QThread.__init__(self) self.myWindow=myWindow def run(self): for filename in os.listdir(): doSomething() progress=29 QMetaObject.invokeMethod(self.myWindow, "updateProgress", \ Qt.QueuedConnection, Q_ARG("int", progress)
改成信号/槽的形式
class MyWindow(QMainWindow): def __init__(self): self.processorThread=ProcessorThread() self.processorThread.progressUpdated.connect( \ self.updateProgress, Qt.QueuedConnection) @pyqtSlot(int) def updateProgress(self, value): self.lblProgress=str(value) class ProcessorThread(QThread): progressUpdated=pyqtSignal(int) def __init__(self): QThread.__init__(self) self.moveToThread(self) def run(self): for filename in os.listdir(): doSomething() progress=29 self.progressUpdated.emit(progress)