感謝分享原文-http://bjbsair.com/2020-04-03/tech-info/29978.htmlhtml
一、PyQt5的介紹:app
是做爲一套Python模塊實現的。框架
是一個運行在全部主流操做系統上的跨平臺和多平臺組件。less
是一套綁定Qt5的應用程序框架,而Qt庫是一套最有用的GUI庫。優化
PyQt5是由Riverbank Computing開發的。ui
2.安裝:操作系統
sudo pip3 install pyqt5
3.用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?