欢迎访问宙启技术站
智能推送

PyQt5.QtCore.QThread的初始化函数__init__()介绍

发布时间:2023-12-15 23:09:13

PyQt5.QtCore.QThread是用于创建多线程的类。它使用了C++的QThread类,在PyQt5中进行了封装。QThread类允许在一个单独的线程中执行耗时的操作,以防止阻塞主线程。

QThread类的初始化函数__init__()是用于创建一个新的QThread对象的。它可以接受一个可选的父对象参数,以将新创建的线程对象指定为另一个对象的子对象。

下面是一个使用PyQt5.QtCore.QThread类的示例:

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

class WorkerThread(QThread):
    # 自定义信号,用于在线程执行完毕后发出信号通知主线程
    finished = pyqtSignal()

    def __init__(self):
        super().__init__()

    def run(self):
        # 执行耗时操作的代码
        for i in range(5):
            print("Working...", i)
        self.finished.emit()  # 发出finished信号

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

    def initUI(self):
        self.setWindowTitle("Example")
        self.setGeometry(300, 300, 300, 200)

        # 创建按钮并将其连接到启动线程的槽函数
        self.button = QPushButton("Start", self)
        self.button.clicked.connect(self.startWorkerThread)
        self.button.setGeometry(100, 80, 100, 30)

    def startWorkerThread(self):
        # 创建并启动WorkerThread线程
        self.workerThread = WorkerThread()
        self.workerThread.finished.connect(self.workerThreadFinished)
        self.workerThread.start()

    def workerThreadFinished(self):
        print("WorkerThread finished")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())

在上面的示例中,我们定义了一个WorkerThread类,它继承自QThread,并包含了自定义的finished信号。在run()方法中,我们编写了耗时操作的代码,并在操作完成后发出finished信号。

MainWindow类继承自QMainWindow,并在initUI()方法中创建了一个按钮。点击按钮后,会创建并启动一个WorkerThread线程,并在线程完成后输出一条消息。

通过上面的代码,我们可以看到QThread类的初始化函数__init__()并没有做太多的事情,它只是调用了父类的初始化函数。

由于QThread对象的创建和使用相对独立,__init__()函数一般不需要传递太多的参数,只需要简单地初始化一些属性即可。其他的功能,如线程的启动、停止、阻塞等,则需要使用QThread类提供的其他方法来实现。