📜  PyQt5 - 进度条的名称(1)

📅  最后修改于: 2023-12-03 14:45:46.643000             🧑  作者: Mango

PyQt5 - 进度条的名称

简介

PyQt5是一个用于创建图形用户界面(GUI)的Python工具包。其中,进度条(ProgressBar)是PyQt5中非常实用的控件之一。 进度条控件可以用于显示任务进度、下载进度、上传进度等场景,并且它可以帮助用户更好地了解任务的完成情况。本文将介绍如何在PyQt5中使用进度条控件。

基本用法

下面是一个简单的PyQt5程序,它演示了如何创建一个进度条控件:

from PyQt5.QtWidgets import QApplication, QProgressBar, QPushButton, QVBoxLayout, QWidget

app = QApplication([])
widget = QWidget()

progress = QProgressBar()
progress.setMaximum(100)
progress.setMinimum(0)

button = QPushButton('Start')
layout = QVBoxLayout()
layout.addWidget(progress)
layout.addWidget(button)

widget.setLayout(layout)
widget.show()

app.exec_()

运行以上代码,你将看到一个带有一个进度条和一个按钮的窗口。进度条控件的最大值和最小值已经指定,可以通过setMaximum()setMinimum()方法来修改这些值。现在,当我们单击Start按钮时,进度条就会循环显示,并同步更新进度。

def run_progress_bar():
    for i in range(101):
        progress.setValue(i)
        QApplication.processEvents()

在上面的代码中,run_progress_bar()方法是一个循环方法,其主要作用是不断更新进度条的值。在循环的过程中,我们使用setValue()方法来设置进度条的当前进度,而使用processEvents()方法可以让UI界面不会卡死或者无响应。

最后,我们将这个方法绑定到按钮,这样点击按钮后,就可以看到进度条的循环显示了。

button.clicked.connect(run_progress_bar)
高级用法
多线程

在使用进度条控件时,一般都会遇到需要对大量数据进行处理的情况。如果采用串行的方式执行,程序的性能将会非常低下,用户体验也会受到影响。这时,我们可以使用多线程的方式,在一个线程中执行耗时的任务,在另一个线程中更新进度条的进度。

import time
from PyQt5.QtCore import QThread, pyqtSignal

class Worker(QThread):
    update_progress = pyqtSignal(int)

    def run(self):
        for i in range(101):
            time.sleep(0.1)
            self.update_progress.emit(i)

在上面的代码中,Worker类继承自QThread,并重写了run()方法。在这个方法中,我们使用time.sleep()方法模拟一个耗时的任务,并使用信号update_progress实时更新进度条控件的进度。

在主程序中,我们可以将进度条控件的值与信号进行绑定,然后启动线程。

worker = Worker()
worker.update_progress.connect(progress.setValue)
worker.start()
带文本的进度条

在一些特殊情况下,我们可能需要在进度条上显示一些文本信息,例如任务的名称、百分比、时间等等。此时,我们可以使用带文本的进度条控件。

progress = QProgressBar()
progress.setValue(50)
progress.setFormat('%p% - %v/%m')

设置文本格式时,可以使用以下关键字:

  • %p:百分比
  • %v:当前值
  • %m:最大值
  • %n:最小值

总结

PyQt5进度条控件是一个非常实用的UI控件,能够帮助我们更好地了解任务的完成情况。使用进度条需要注意线程安全问题,避免卡死或者无响应。同时,我们可以通过设置文本格式,让进度条控件显示更加专业、清晰的信息。