下面是一个使用 PySide6 的示例代码,它实现了使用多线程的方式运行后台耗时程序并且不影响进度条的刷新:
``` import sys import time from PySide6.QtWidgets import QApplication, QMainWindow, QProgressBar, QPushButton, QVBoxLayout, QWidget from PySide6.QtCore import QThread, Signal
class Worker(QThread): # 定义一个信号,用于在运行完耗时程序后发送更新进度条的消息 update_progress = Signal(int)
def run(self):
for i in range(1, 101):
# 模拟耗时程序
time.sleep(0.1)
self.update_progress.emit(i)
class MainWindow(QMainWindow): def init(self): super().init() self.setWindowTitle("进度条示例") self.setGeometry(100, 100, 300, 300)
# 创建一个按钮
self.button = QPushButton("开始耗时程序")
self.button.clicked.connect(self.start_worker)
# 创建一个进度条
self.progress_bar = QProgressBar()
self.progress_bar.setRange(0, 100)
# 创建一个垂直布局,将按钮和进度条加入布局中
layout = QVBoxLayout()
layout.addWidget(self.button)
layout.addWidget(self.progress_bar)
# 创建一个中心窗口,并将布局加入中心窗口
central_widget = QWidget()
central_widget.setLayout(layout)
self.setCentralWidget(central_widget)
def start_worker(self):
# 创建一个后台线程,并启动
self.worker = Worker()
self.worker.update_progress.connect(self.update_progress)
self.worker.start()
def update_progress(self, value):
# 更新进度条
self.progress_bar.setValue(value)
if name == "main": app = QApplication(sys.argv) window = MainWindow() window