易三一世@PyQt5的介绍和画圆形进度条的代码分析


1、PyQt5的介绍:
是作为一套Python模块实现的 。
是一个运行在所有主流操作系统上的跨平台和多平台组件 。
是一套绑定Qt5的应用程序框架 , 而Qt库是一套最有用的GUI库 。
PyQt5是由Riverbank Computing开发的 。
易三一世@PyQt5的介绍和画圆形进度条的代码分析
本文插图
2.安装:sudo pip3 install pyqt5
3.用PyQt5来制作一个动态的圆形进度条的效果图 , 如下:
易三一世@PyQt5的介绍和画圆形进度条的代码分析
本文插图
4.代码分析:
4.1 第1步:#---第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 = 0self.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 += 1self.my_signal.emit(self.p)self.msleep(100)
【易三一世@PyQt5的介绍和画圆形进度条的代码分析】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?