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

利用PyQt5.QtCore.QThread实现并行计算

发布时间:2024-01-04 14:54:57

PyQt5是一个用于开发GUI应用程序的Python模块。其中的QtCore模块提供了许多用于多线程编程的类和函数,其中包括QThread类,可以用于实现并行计算。

下面是一个使用QThread实现并行计算的例子:

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

# 自定义的计算线程类
class CalculateThread(QThread):
    # 定义一个信号,用于在计算完成后发送信号给主线程
    finish_signal = pyqtSignal(int)

    def __init__(self, num):
        super().__init__()
        self.num = num

    def run(self):
        # 在这里执行需要进行的计算任务
        result = self.calculation(self.num)
        # 发送信号,将计算结果传递给主线程
        self.finish_signal.emit(result)

    def calculation(self, num):
        # 这里只是一个简单的示例计算任务,可以根据实际需求进行修改
        result = 0
        for i in range(1, num+1):
            result += i
        return result

# 主窗口类
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 设置窗口大小
        self.setGeometry(300, 300, 400, 200)

        # 创建按钮和标签
        self.calculate_btn = QPushButton('开始计算', self)
        self.calculate_btn.setGeometry(150, 50, 100, 30)
        self.result_label = QLabel('计算结果:', self)
        self.result_label.setGeometry(150, 100, 100, 30)

        # 绑定按钮点击事件
        self.calculate_btn.clicked.connect(self.calculate)

    # 按钮点击事件处理函数
    def calculate(self):
        # 创建计算线程并启动
        self.thread = CalculateThread(100000000)
        self.thread.finish_signal.connect(self.show_result)
        self.thread.start()

    # 计算完成后的显示结果处理函数
    def show_result(self, result):
        self.result_label.setText('计算结果:%d' % result)

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

以上代码创建了一个简单的界面应用程序,包含一个按钮和一个标签。点击按钮后,通过新建一个计算线程,在新线程中进行复杂的计算任务,并将结果发送给主线程,主线程收到结果后更新界面上的标签显示。

在这个例子中,我们自定义了一个CalculateThread类继承自QThread,重写了其中的run方法,run方法是QThread类的主要方法,用于线程执行具体的任务。在run方法中进行了一个简单的加法计算,计算完成后通过发射信号的方式将结果传递给主线程。MainWindow类则是主窗口类,其中包含了一个按钮和一个标签对象,按钮和标签对象的创建和布局通过Qt的布局管理器实现。当按钮点击时,就会创建计算线程并启动,同时通过connect方法连接了计算线程的finish_signal信号和主线程的show_result方法。在show_result方法中,将计算结果显示在标签对象上。

通过以上代码,我们实现了一个简单的使用PyQt5和QThread实现并行计算的例子。在实际的应用中,可以根据需要对该例子进行修改和扩展,实现更为复杂的并行计算任务。