简而言之:移至
QThread并使用Qt的信号和插槽,它们是线程之间进行通信的首选方式。
该答案提供了一些示例,显示如下:https :
//stackoverflow.com/a/6789205/2319400
就您而言,使用上面的“ SomeObject”版本看起来像这样:
class Worker(QtCore.QObject): madeProgress = QtCore.pyqtSignal([int]) finished = QtCore.pyqtSignal() def __init__(self, cmdlist): self.cmdlist = cmdlist def run(self): for icmd, cmd in enumerate(self.cmdlist): # execute your work # processCommand(cmd) # signal that we've made progress self.madeProgress.emit(icmd) # emit the finished signal - we're done self.finished.emit()
然后将此工作程序移动到
QThread您创建的实例。按照链接的答案中的模式,然后可以将
madeProgress信号连接到
setValue进度条的插槽:
workerThread = QThread()workerObject = Worker(cmdlist)workerObject.moveToThread(workerThread)workerThread.started.connect(workerObject.run)workerObject.finished.connect(workerThread.quit)# create a progressbar with min/max according to# the length of your cmdlistprogressBar = QProgressBar()progressBar.setRange(0, len(cmdlist))# connect the worker's progress signal with the progressbarworkerObject.madeProgress.connect(progressBar.setValue)# start the thread (starting your worker at the same time)workerThread.start()



