Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to move an object back and forth between QThreads in Pyqt
    primarykey
    data
    text
    <p>In my program (using Python 2.7), I create an object containing some important data and methods. Some of the methods are CPU hungry, so in certain cases I move the object to a new QThread for the duration of the CPU intensive methods, then have them come back to the main thread. At a later point, when a CPU intensive method is called, I would like to move the object to another QThread again, however this fails saying "Current thread is not the object's thread".</p> <p>Here is a trivial example which reproduces the problem:</p> <pre><code>import sys from PyQt4 import QtCore, QtGui from time import sleep class ClassA(QtGui.QDialog): def __init__(self): super(ClassA, self).__init__() mainLayout=QtGui.QVBoxLayout() self.lineEdit=QtGui.QLineEdit() mainLayout.addWidget(self.lineEdit) self.setLayout(mainLayout) self.show() self.obj=ClassC(self) self.executeProgram() def executeProgram(self): self.lineEdit.setText("Starting new thread...") self.thread=QtCore.QThread() self.obj.moveToThread(self.thread) self.thread.started.connect(self.obj.doWork) self.obj.doingWork.connect(self.updateGui) self.obj.finished.connect(self.killThread) self.thread.start() def updateGui(self,message): self.lineEdit.setText(message) def killThread(self): self.thread.quit() self.thread.wait() self.obj.finished.disconnect() self.executeProgram() class ClassC(QtCore.QObject): finished=QtCore.pyqtSignal() doingWork=QtCore.pyqtSignal(str) def __init__(self,parent=None): super(ClassC, self).__init__() def doWork(self): for i in range(5): self.doingWork.emit("doing work: iteration "+str(i)) sleep(1) self.finished.emit() if __name__=="__main__": app=QtGui.QApplication(sys.argv) obj=ClassA() app.exec_() </code></pre> <p>Is it possible to move an object to a different QThread multiple times? If so, how would I fix my code to do this?</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload