【GUI】| PyQt5 QProgressBar
2026/5/1 18:49:50 网站建设 项目流程

在 PyQt 中实现 .start()、.progress() 和 .finish() 功能,通常是为了在后台执行耗时任务的同时,通过信号(Signal)机制更新主线程中的进度条(如 QProgressBar),避免界面卡顿。

核心实现思路‌
‌.start()‌:调用 QThread.start() 启动工作线程。
‌.progress()‌:通过自定义信号(如 pyqtSignal(int))从工作线程向主线程发送进度更新。
‌.finish()‌:任务完成后发射完成信号(如 pyqtSignal(str)),通知主线程进行收尾操作。

from PyQt5.QtCore import QThread, QObject, pyqtSignal from PyQt5.QtWidgets import QApplication, QProgressBar, QPushButton, QVBoxLayout, QWidget import sys import time class Worker(QObject): progress = pyqtSignal(int) # 进度更新信号 finished = pyqtSignal(str) # 完成信号 def do_work(self): for i in range(101): time.sleep(0.1) # 模拟耗时操作 self.progress.emit(i) # 发送当前进度 self.finished.emit("任务完成!") class MainWindow(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): self.progress_bar = QProgressBar(self) self.progress_bar.setRange(0, 100) self.start_button = QPushButton("开始任务", self) self.start_button.clicked.connect(self.start_task) layout = QVBoxLayout() layout.addWidget(self.progress_bar) layout.addWidget(self.start_button) self.setLayout(layout) # 线程和工作器初始化 self.thread = QThread() self.worker = Worker() self.worker.moveToThread(self.thread) # 连接信号与槽 self.thread.started.connect(self.worker.do_work) self.worker.progress.connect(self.progress_bar.setValue) self.worker.finished.connect(self.thread.quit) self.worker.finished.connect(self.worker.deleteLater) self.thread.finished.connect(self.thread.deleteLater) def start_task(self): if not self.thread.isRunning(): self.thread.start() if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_())

使用 ‌Worker 对象 + moveToThread()‌ 方式,而非直接继承 QThread,更安全且符合 Qt 最佳实践

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询