Pyside6|Pyqt实现处理GUI界面获取的数据时进度条同步更新
为了在使用
QThread
时先获取界面中的数据,然后对这些数据进行长时间处理,并将处理结果和进度条信号返回给GUI线程,你需要做几件事情:
设计接口以从GUI线程获取数据:这通常意味着你需要在
Worker
类中提供一个方法来设置需要处理的数据。处理数据并发送进度信号:在
run
方法中,使用这些数据执行长时间的任务,并发送进度信号。发送处理结果:一旦数据处理完成,你可以通过另一个信号来发送结果。
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_())
如果对您有用还请点赞收藏加关注,后续更新更精彩!!!