Ich versuche einen Thread zu beenden, nachdem es fertig ist. Ich verwende moveToThread. Ich versuche, den Worker-Thread vom Hauptthread zu trennen, indem ich self.thread.quit() im Slot aufruft. Und das funktioniert nicht.Wie man einen QThread in PyQt5 korrekt beendet, wenn moveToThread verwendet wird
Ich habe mehrere Beispiele zum Starten des Threads mit moveToThread, wie diesem gefunden. Aber ich kann nicht finden, wie man eines aufgibt. Diese
from PyQt5.QtCore import QObject, QThread
from PyQt5.QtCore import pyqtSlot, pyqtSignal
from PyQt5.QtWidgets import QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
print("Base init")
self.start_thread()
@pyqtSlot(int)
def onFinished(self, i):
print("Base caught finished, {}".format(i))
self.thread.quit()
print('Tried to quit thread, is the thread still running?')
print(self.thread.isRunning())
def start_thread(self):
self.thread = QThread()
self.w = Worker()
self.w.finished1[int].connect(self.onFinished)
self.w.moveToThread(self.thread)
self.thread.started.connect(self.w.work)
self.thread.start()
class Worker(QObject):
finished1 = pyqtSignal(int)
def __init__(self):
super().__init__()
print("Worker init")
def work(self):
print("Worker work")
self.finished1.emit(42)
if __name__ == "__main__":
import sys
from PyQt5.QtWidgets import QApplication
app = QApplication(sys.argv)
mw = MainWindow()
mw.show()
sys.exit(app.exec_())
ist die Ausgabe von allen meinen Druckfunktionen (ohne die Farbe natürlich):
Base init
Worker init
Worker work
Base caught finished, 42
Tried to quit thread, is the thread still running?
True
Danke! Du hast recht. Der Thread hörte schließlich auf. print (self.thread.isRunning()) zeigt False nach dem Hinzufügen von time.sleep (1) – squirtgun