PyQt5的介紹和畫圓形進度條的程序解析

感謝分享原文-http://bjbsair.com/2020-04-03/tech-info/29978.htmlhtml

一、PyQt5的介紹:app

是做爲一套Python模塊實現的。框架

是一個運行在全部主流操做系統上的跨平臺和多平臺組件。less

是一套綁定Qt5的應用程序框架,而Qt庫是一套最有用的GUI庫。優化

PyQt5是由Riverbank Computing開發的。ui

PyQt5的介紹和畫圓形進度條的代碼分析

2.安裝:操作系統

sudo pip3 install pyqt5

3.用PyQt5來製做一個動態的圓形進度條的效果圖,以下:線程

PyQt5的介紹和畫圓形進度條的代碼分析

4.代碼分析:code

4.1 第1步:server

#---第1步---導出模塊---  
import sys  
from PyQt5.QtCore import *  
from PyQt5.QtGui import *  
from PyQt5.QtWidgets import QApplication, QWidget,QLabel  
from PyQt5 import *

4.2 第2步:

#---第2步---定義圓形進度條類的定義---  
class CirBar(QWidget):  
    #---第2-1步---初始化定義---  
    def __init__(self):  
        super(CirBar, self).__init__()  
        # 去邊框,去掉邊框也就是會去掉右上角退出的「×」,好看,可是強制退出要報錯,小bug,能夠繼續優化  
        self.setWindowFlags(Qt.FramelessWindowHint)    
        self.setAttribute(Qt.WA_TranslucentBackground)  # 設置窗口背景透明  
  
        self.persent = 0  
        self.my_thread = MyThread()  
        self.my_thread.my_signal.connect(self.GenUpdate)  
        self.my_thread.start()  
    #定義更新  
    def GenUpdate(self, p):  
        self.persent = p  
    #定義繪畫事件  
    def paintEvent(self, event):  
        #360°分紅100等分  
        rotateAngle = 360 * self.persent / 100  
        # 繪製準備工做,啓用反鋸齒  
        painter = QPainter(self)  
        #啓用反鋸齒,若是本行註釋,那麼圓的外線有鋸齒,不光滑。  
        painter.setRenderHints(QtGui.QPainter.Antialiasing)  
  
        #外圓底色是blue,注意100,100和內圓的96和96,說明外圓不是正圓,稍大一點,有露出外圓底色一點弧形藍色  
        painter.setBrush(QBrush(QColor("blue")))  
        #250和250是圓點的座標  
        painter.drawEllipse(250, 250, 100, 100)  # 畫外圓  
   
        #內圓底色是黃色  
        painter.setBrush(QBrush(QColor("yellow")))  
        #250和250是圓點的座標  
        painter.drawEllipse(250, 250, 96, 96)  # 畫內圓  
        #角度漸變(QConicalGradient)  
        gradient = QConicalGradient(50, 50, 91)  
        #進度條的畫筆顏色  
        gradient.setColorAt(1, QColor("red"))  
        self.pen = QPen()  
        self.pen.setBrush(gradient)  # 設置畫刷漸變效果  
        self.pen.setWidth(8)  
        self.pen.setCapStyle(Qt.RoundCap)  
        painter.setPen(self.pen)  
        #250和250是圓點的座標  
        painter.drawArc(QtCore.QRectF(250, 250, 98, 98), int((90 - 0) * 16), -int(rotateAngle * 16))  # 畫圓環  
   
        #中間畫筆的顏色,顯示動態百分數的顏色  
        painter.setPen(QColor("green"))  
        #畫中間動態百分比的文字設置和250和250是圓點的座標  
        painter.drawText(QtCore.QRectF(250, 250, 98, 98), Qt.AlignCenter, "%d%%" % self.persent)  # 顯示進度條當前進度  
        self.update()

4.3 第3步:

#---第3步---建立線程  
class MyThread(QThread):  
    my_signal = pyqtSignal(int)  
    p = 0  
    #初始化線程  
    def __init__(self):  
        super(MyThread, self).__init__()  
    #運行線程  
    def run(self):  
        while True:  
            if self.p < 100:  
                self.p += 1  
                self.my_signal.emit(self.p)  
                self.msleep(100)

4.4 第4步:

#---第4步---  
if __name__ == '__main__':  
    app = QApplication(sys.argv)  
  
    CirBar = CirBar()  
    CirBar.show()  
    sys.exit(app.exec_())  
  
#若是去邊框後好看,可是沒有窗口右上角的‘×’退出,強制退出,會報錯,不用管它。  
#The X11 connection broke (error 1). Did the X11 server die?
相關文章
相關標籤/搜索