Python高級進階#015 pyqt5進度條QProgressBar結合使用qbasictimer
- 2019 年 11 月 5 日
- 筆記
一、進度條的使用思想
進度條qprogressbar
使用思想:
1.載入類庫
2.初始化類對象
3.設置最小值和最大值
4.時鐘的使用QBasicTimer,槽方法對應類庫的timerEvent
5.判斷什麼時候停止載入進度條
這裡我們在學習使用進度條的時候,必須要結合使用時鐘控制項,這樣才能讓我們看到進度條動的感覺。
二、製作案例

說明如下:
1.介面由進度條和按鈕組成
2.進度條的值範圍為0~100
3.按鈕的狀態為「開始」、「停止」、「完成」
4..按鈕需要能夠控制進度條的運行
三、開發過程知識點介紹
1.導入時鐘類
from PyQt5.QtCore import QBasicTimer
2.初始化進度條
self.pgb=QProgressBar(self) #類對象的初始化 self.pgb.move(50,50) #將進度條移動到指定位置 self.pgb.resize(300,20) #設置進度條寬高
3.設置進度條的範圍
#設置進度條的範圍 self.pgb.setMinimum(0) self.pgb.setMaximum(100) self.pgb.setValue(50)
4.時鐘控制項
作用:每隔多少時間執行一次時鐘內部的程式碼。
時間單位為:毫秒
1秒=1000毫秒
QBasicTimer控制項解析
- isActive方法:返回時鐘控制項是否開啟。如果開啟返回true,否則為false
- Start方法:使得時鐘控制項開啟來。需要傳入時間間隔,時間單位為毫秒。
簡單的參數使用格式:
Start(時間,self)
Stop方法:使得時鐘控制項關閉。
timerId方法:返回當前時鐘控制項的ID,表示某個時鐘控制項。這個主要用於多個時鐘控制項使用的時候,區分不同的時鐘控制項。
5.時鐘控制項的事件重寫
對應的槽方法是Qwidget控制項自帶的timerEvent事件。
時鐘控制項的每個多少時間要運行一次的程式碼就是在timerEvent方法中,我們在使用時鐘控制項的時候要重寫這個方法。
時鐘控制項狀態切換的核心程式碼:
if self.timer1.isActive(): #檢測是否開啟 self.timer1.stop() self.btn.setText(「開始」) #這裡的按鈕的狀態顯示的是下一次的行為 else: self.timer1.start(100, self) self.btn.setText("停止")
四、總結強調
1.掌握Qprogressbar的控制項的配置
2.掌握時鐘控制項的基本使用QBasicTimer
3.理解按鈕控制時鐘控制項達到進度條的運行的思想。
本節知識源程式碼:
import sys from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QProgressBar from PyQt5.QtCore import QBasicTimer class MyClass(QWidget): def __init__(self): super(MyClass, self).__init__() self.initUI() def initUI(self): self.setWindowTitle("劉金玉編程") self.setGeometry(300,100,400,300) #載入進度條控制項 self.pgb=QProgressBar(self) self.pgb.move(50,50) self.pgb.resize(300,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_()
