進度條(QProgressBar)
- QProgressBar 是進度條,如下圖所示
- 說明
-
QProgressBar小部件提供了一個水平或垂直的進度條
-
進度條也是一個常用的控件,當程序需要做一件比較耗費時間的任務(比如統計數據,下載文件等)時,可以用來向用戶指示操作的進度
-
進度條用於向用戶指示操作的進度,並向他們保證應用程序仍在運行。
-
QProgressBar 進度條把每個進度稱之為一個step(步驟);
-
進度條使用steps的概念,可以通過指定最小和最大可能的step值來設置它,並且當您稍后將當前step值賦給它時,它將顯示已經完成的step的百分比
-
百分比是通過將進度 (value() - minimum()) / (maximum() - minimum())來計算的
-
可以通過它的 setRange() 方法設定步驟個數
progressbar.setRange(0, 10)
-
這樣就設定了,將整個進度分為5步(step)
-
然后,通過 setValue 方法,指定當前完成到了哪一步
progressbar.setValue(5)
-
這樣就表示完成了 5/10, 也就是 50%, 進度條就會顯示50%的進度。
-
可以使用 reset() 方法將進度條倒退到開頭,重新開始
-
-
可以使用 setMinimum() 和 setMaximum() 指定最小和最大 steps;默認值是0和99。
-
當前的 step 由 setValue()設置
-
進度條可以通過 reset() 方法,重新開始
-
-
如果最小值和最大值都設置為0,也就是將setRange(0, 0),那么欄會顯示一個繁忙的指示符,而不是步驟的百分比,如下圖所示
- 常用方法:
方法 | 值 | 說明 |
---|---|---|
setRange | QProgressBar.setRange(min, Max) | 通過 setRange 方法設定步驟個數 |
setValue | QProgressBar.setValue(number) | QProgressBar.setValue()該方法設置進度條的當前值,value值不停地增加,進度就在增加 例如:setValue(5) : 假如整個step是10,則表示完成整個步驟的5/10,即50% |
setMaximum() | 0 — 99 例如:QProgressBar.setMaximum(99) |
設置step的最大值,默認值是99 例如:QProgressBar.setMaximum(99) 表示step最大值為99 |
setMinimum() | 0 — 99 例如:QProgressBar.setMinimum(0) |
設置stepd最小值,默認值是0 例如:QProgressBar.setMinimum(0) 表示step最小值為0 |
reset() | QProgressBar.reset() | 設置進度條重新開始 |
setOrientation | QProgressBar.setOrientation(Qt.Horizontal) QProgressBar.setOrientation(Qt.Vertical) |
QProgressBar.setOrientation()該屬性設置了進度條的方向; 方向必須是Qt.Horizontal(默認,水平)或Qt.Vertical(垂直) 注意:水平和垂直,需導入 from PyQt5.QtCore import Qt |
setFormat | %p% — 被完成的百分比取代 %v% — 被當前值替換 %m% — 被總step所取代 默認值是 : %p% 注意:如果沒有加第二個%(即%p),顯示的指數則沒有% |
QProgressBar.setFormat()屬性包含用於生成當前文本的字符串 |
setInvertedAppearance | setInvertedAppearance(True) setInvertedAppearance(False) |
設置進度條的走向; QProgressBar.setInvertedAppearance(True) 進度條從左到右(水平進度條)/從上到下(垂直進度條) QProgressBar.setInvertedAppearance(False) 進度條從右到左(水平進度條)/從下到上(垂直進度條) |
- 演示示例
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QProgressBar
from PyQt5.QtCore import QBasicTimer
class MyClass(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.resize(300, 200)
# 載入進度條控件
self.pgb = QProgressBar(self)
self.pgb.move(50, 50)
self.pgb.resize(250, 20)
# 配置一個值表示進度條的當前進度
self.pv = 0
# 申明一個時鍾控件
self.timer1 = QBasicTimer()
# 設置進度條的范圍
self.pgb.setMinimum(0)
self.pgb.setMaximum(100)
self.pgb.setValue(self.pv)
# 載入按鈕
self.btn = QPushButton("開始", self)
self.btn.move(50, 100)
self.btn.clicked.connect(self.myTimerState)
self.show()
def myTimerState(self):
if self.timer1.isActive():
self.timer1.stop()
self.btn.setText("開始")
else:
self.timer1.start(100, self)
self.btn.setText("停止")
def timerEvent(self, e):
if self.pv == 100:
self.timer1.stop()
self.btn.setText("完成")
else:
self.pv += 1
self.pgb.setValue(self.pv)
if __name__ == "__main__":
app = QApplication(sys.argv)
mc = MyClass()
app.exec_()