在PyQt5中,可以使用QThread类来创建子线程。下面是一个示例代码,展示了如何在已有的信号和槽中加入子线程:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
from PyQt5.QtCore import QThread, pyqtSignal

class WorkerThread(QThread):
    finished = pyqtSignal()

    def run(self):
        # 在子线程中执行耗时操作
        # ...

        # 发射finished信号,表示子线程执行完毕
        self.finished.emit()

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.button = QPushButton("Start", self)
        self.button.clicked.connect(self.startWorkerThread)

    def startWorkerThread(self):
        # 创建子线程
        self.workerThread = WorkerThread()
        self.workerThread.finished.connect(self.workerThreadFinished)

        # 启动子线程
        self.workerThread.start()

    def workerThreadFinished(self):
        # 子线程执行完毕后的处理
        # ...

        # 删除子线程对象
        self.workerThread.deleteLater()

if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    sys.exit(app.exec_())

在上面的代码中,WorkerThread类继承自QThread,并且定义了一个finished信号。在run方法中执行耗时操作,并在执行完毕后发射finished信号。

MainWindow类中,通过点击按钮来启动子线程。在startWorkerThread方法中,创建WorkerThread对象,并将其finished信号连接到workerThreadFinished方法。然后调用start方法启动子线程。

workerThreadFinished方法中,可以处理子线程执行完毕后的操作。最后,通过调用deleteLater方法删除子线程对象。


原文地址: https://www.cveoy.top/t/topic/pLg1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录