1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| import sys from PyQt6.QtCore import QThread, pyqtSignal, QObject, pyqtSlot, QMetaObject from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout from pydev_ipython.qt import QtCore
class Worker(QObject):
finished = pyqtSignal()
def __init__(self, parent=None): super(Worker, self).__init__(parent)
def run(self): import time for i in range(1, 11): time.sleep(1) print(i) self.finished.emit()
class MainApp(QWidget): def __init__(self): super(MainApp, self).__init__() self.setWindowTitle("QThread Example") layout = QVBoxLayout() self.setLayout(layout) self.setGeometry(100, 100, 400, 200) self.btn = QPushButton("Start Thread") layout.addWidget(self.btn) self.btn.clicked.connect(self.start_thread)
def start_thread(self): self.worker = Worker(parent=self) self.worker.setObjectName("worker1") self.thread = QThread() self.worker.moveToThread(self.thread) self.thread.started.connect(self.worker.run) self.worker.finished.connect(self.worker.deleteLater) self.thread.finished.connect(self.thread.deleteLater) QMetaObject.connectSlotsByName(self) self.thread.start()
@pyqtSlot() def on_worker1_finished(self): print("Worker finished") self.thread.quit() self.thread.wait() print("Thread finished")
if __name__ == '__main__': app = QApplication(sys.argv) window = MainApp() window.show() sys.exit(app.exec())
|