用pyqt5写一个界面,界面包含一个图片显示和进度条,进度条实时显示后台程序处理的进度,异步执行,不对界面进行阻塞
时间: 2023-05-22 14:00:53 浏览: 179
可以使用QThread和QTimer来实现异步执行和进度条的实时更新。具体代码如下:
```python
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QProgressBar
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt, QThread, QTimer
class WorkerThread(QThread):
def __init__(self, parent=None):
super().__init__(parent)
self.progress = 0
def run(self):
while self.progress < 100:
self.progress += 1
self.sleep(0.1)
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('PyQt5 Image Viewer')
self.setGeometry(100, 100, 640, 480)
self.image_label = QLabel(self)
self.image_label.setGeometry(10, 10, 620, 400)
self.progress_bar = QProgressBar(self)
self.progress_bar.setGeometry(10, 420, 620, 20)
self.thread = WorkerThread(self)
self.thread.started.connect(self.start_processing)
self.thread.finished.connect(self.finish_processing)
self.timer = QTimer(self)
self.timer.timeout.connect(self.update_progress_bar)
def start_processing(self):
self.timer.start(100)
def finish_processing(self):
self.timer.stop()
def update_progress_bar(self):
self.progress_bar.setValue(self.thread.progress)
def show_image(self, image_path):
pixmap = QPixmap(image_path)
self.image_label.setPixmap(pixmap)
def start(self):
self.thread.start()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show_image('image.jpg')
window.start()
sys.exit(app.exec_())
```
在这个例子中,我们创建了一个WorkerThread类来模拟后台处理任务,并使用QTimer来实时更新进度条。在MainWindow类中,我们创建了一个show_image方法来显示图片,并在start方法中启动线程。注意,我们没有使用阻塞方法,因此界面不会被阻塞。
阅读全文