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?
相关文章
相关标签/搜索