Ich versuche, einen neuen Thread-Worker außerhalb meiner GUI zu erstellen. Wenn ich QThread unterlasse, funktioniert es wie erwartet, die GUI ist davon nicht betroffen. Wenn ich die moveToThread-Technik verwende, bekomme ich die GUI vollständig gesperrt. Ich nehme an, dass ich den neuen Thread versehentlich in den Hauptthread lege, aber ich verstehe nicht, was ich mache, um das zu verursachen. Wie kann die start2-Funktion funktionieren, ohne den Haupt-Thread einzufrieren?Erklärung für diese Unterklasse erforderlich QThread vs moveToThread Beispiel
from PySide import QtGui, QtCore
import sys
import time
class THREAD(QtCore.QThread):
def __init__(self):
super(THREAD, self).__init__()
def run(self):
time.sleep(5)
print "done"
class WORKER(QtCore.QObject):
def __init__(self):
super(WORKER, self).__init__()
def run(self):
time.sleep(5)
print "done"
class GUI(QtGui.QDialog):
def __init__(self):
super(GUI, self).__init__()
mainLayout = QtGui.QHBoxLayout()
self.setLayout(mainLayout)
start1Button = QtGui.QPushButton("Start1")
start2Button = QtGui.QPushButton("Start2")
mainLayout.addWidget(start1Button)
mainLayout.addWidget(start2Button)
start1Button.clicked.connect(self.start1)
start2Button.clicked.connect(self.start2)
def start1(self):
self.myThread = THREAD()
self.myThread.start()
def start2(self):
myWorker = WORKER()
myThread = QtCore.QThread()
myThread.start()
myWorker.moveToThread(myThread)
myWorker.run()
def main():
app = QtGui.QApplication(sys.argv)
ex = GUI()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Ausgezeichnet, danke ekhumoro! – bneall