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

PyQt5中使用QThread实现后台任务处理

发布时间:2023-12-26 19:42:13

在PyQt5中使用QThread可以实现后台任务处理,从而避免界面阻塞。QThread是Qt的线程类,它可以在后台执行耗时的操作,而不会阻塞界面更新。下面是一个使用QThread实现后台任务处理的例子。

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


class Worker(QThread):
    # 定义一个信号,用于发送任务进度
    progress_signal = pyqtSignal(int)

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

    def run(self):
        for i in range(1, 101):
            # 发送任务进度信号
            self.progress_signal.emit(i)
            self.msleep(100)  # 模拟耗时操作


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

        self.worker = Worker()

        self.label = QLabel(self)
        self.label.setGeometry(100, 100, 200, 30)

        self.button = QPushButton("Start", self)
        self.button.setGeometry(100, 150, 100, 30)

        self.button.clicked.connect(self.start_task)
        self.worker.progress_signal.connect(self.update_progress)

    def start_task(self):
        # 启动任务
        self.worker.start()

    def update_progress(self, progress):
        # 更新任务进度
        self.label.setText(f"Progress: {progress}%")
        self.label.adjustSize()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()

    sys.exit(app.exec_())

在这个例子中,定义了一个继承自QThread的Worker类,用于执行后台任务。在run方法中,通过发射progress_signal信号来发送任务进度。在MainWindow类中,创建了一个Worker实例,将任务进度信号和更新进度的槽函数连接起来。点击Start按钮后,会启动任务并在标签上显示任务进度。

通过使用QThread实现后台任务处理,可以确保界面的流畅性和及时响应。在实际应用中,可以根据需要修改Worker类中的run方法,执行具体的后台任务。