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

PyQt5.QtCore.QThread:在GUI应用程序中实现并行处理

发布时间:2024-01-04 14:52:23

PyQt5是一个Python GUI框架,它提供了一个名为QThread的类,可以在GUI应用程序中实现并行处理。QThread是Qt中的一个线程类,可以用于执行耗时的操作,以避免阻塞主线程。

下面是一个使用QThread的简单示例,该示例在后台执行一个耗时的任务,并在任务完成后更新GUI界面。

import sys
import time
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QVBoxLayout, QWidget


class Worker(QThread):
    finished = pyqtSignal(str)

    def run(self):
        time.sleep(5)  # 模拟一个耗时的任务
        self.finished.emit('Task finished')


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Parallel Processing Example')

        self.label = QLabel('Click the button to start the task')
        self.button = QPushButton('Start Task')
        self.button.clicked.connect(self.start_task)

        layout = QVBoxLayout()
        layout.addWidget(self.label)
        layout.addWidget(self.button)

        widget = QWidget()
        widget.setLayout(layout)
        self.setCentralWidget(widget)

    def start_task(self):
        self.button.setEnabled(False)
        
        # 创建一个Worker对象并启动任务
        worker = Worker()
        worker.finished.connect(self.update_label)
        worker.start()

    def update_label(self, message):
        self.label.setText(message)
        self.button.setEnabled(True)


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

在这个例子中,创建了一个继承自QThread的Worker类,用于执行耗时的任务。使用run方法重写run方法,在其中模拟一个耗时的任务,并在完成后发出finished信号。

MainWindow类是一个继承自QMainWindow的窗口类,其中包含一个标签和一个按钮。单击按钮时,会禁用按钮并创建一个Worker对象来执行任务。任务完成后,会调用update_label方法来更新标签,并重新启用按钮。

在主函数中,创建了一个QApplication对象和一个MainWindow对象,并将窗口显示出来。

当单击按钮时,会将按钮禁用,并在后台执行耗时任务。任务完成后,会更新标签,并重新启用按钮。

这个例子演示了如何在GUI应用程序中使用QThread实现并行处理,以避免阻塞主线程。在实际应用中,您可以根据需要进行更复杂的并行处理。