重磅更新||Pyside6|Pyqt实现处理GUI界面获取的数据时进度条同步更新

Pyside6|Pyqt实现处理GUI界面获取的数据时进度条同步更新

为了在使用QThread时先获取界面中的数据,然后对这些数据进行长时间处理,并将处理结果和进度条信号返回给GUI线程,你需要做几件事情:

  1. 设计接口以从GUI线程获取数据:这通常意味着你需要在Worker类中提供一个方法来设置需要处理的数据。

  2. 处理数据并发送进度信号:在run方法中,使用这些数据执行长时间的任务,并发送进度信号。

  3. 发送处理结果:一旦数据处理完成,你可以通过另一个信号来发送结果。

from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QLineEdit, QVBoxLayout, QWidget, QProgressBar
from PySide6.QtCore import QThread, Signal
import sys


class Worker(QThread):
    progress_changed = Signal(int)  # 发出进度更新信号
    result_ready = Signal(str)  # 发出结果信号,这里假设结果是字符串

    def __init__(self):
        super().__init__()
        self.data_to_process = None

    def set_data(self, data):
        self.data_to_process = data

    def run(self):
        if self.data_to_process is None:
            return

        for i in range(101):
            # 模拟数据处理和进度更新
            self.progress_changed.emit(i)  # 发出进度信号
            self.data_to_process += 1
            # 模拟耗时操作
            import time
            time.sleep(0.1)

            # 假设处理完成后有一个结果
        result = f"Processed data: {self.data_to_process}"
        self.result_ready.emit(result)  # 发出结果信号


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

        self.initUI()

    def initUI(self):
        # 设置窗口的基本布局
        self.central_widget = QWidget(self)
        self.setCentralWidget(self.central_widget)
        layout = QVBoxLayout(self.central_widget)

        # 输入框
        self.input_line_edit = QLineEdit(self.central_widget)
        layout.addWidget(self.input_line_edit)

        # 进度条
        self.progress_bar = QProgressBar(self.central_widget)
        self.progress_bar.setRange(0, 100)
        layout.addWidget(self.progress_bar)

        # 按钮
        self.start_button = QPushButton("Start Processing", self.central_widget)
        self.start_button.clicked.connect(self.start_processing)
        layout.addWidget(self.start_button)

        # 创建Worker实例并连接信号
        self.worker = Worker()
        self.worker.progress_changed.connect(self.update_progress_bar)
        self.worker.result_ready.connect(self.on_result_ready)

    def start_processing(self):
        data = int(self.input_line_edit.text())
        self.worker.set_data(data)
        self.worker.start()

    def update_progress_bar(self, progress):
        self.progress_bar.setValue(progress)

    def on_result_ready(self, result):
        # 在这里处理结果,比如显示在一个标签或者对话框中
        self.input_line_edit.setText(result)


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

如果对您有用还请点赞收藏加关注,后续更新更精彩!!! 

猜你喜欢

转载自blog.csdn.net/m0_56230886/article/details/140899442