PyQt5的介绍和画圆形进度条的代码分析

1、PyQt5的介绍:

是作为一套Python模块实现的。

是一个运行在所有主流操作系统上的跨平台和多平台组件。

是一套绑定Qt5的应用程序框架,而Qt库是一套最有用的GUI库。

PyQt5是由Riverbank Computing开发的。


PyQt5的介绍和画圆形进度条的代码分析

2.安装:

<code>sudo pip3 install pyqt5/<code>

3.用PyQt5来制作一个动态的圆形进度条的效果图,如下:


PyQt5的介绍和画圆形进度条的代码分析

4.代码分析:

4.1 第1步:

<code>#---第1步---导出模块---
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QApplication, QWidget,QLabel
from PyQt5 import */<code>

4.2 第2步:

<code>#---第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()/<code>

4.3 第3步:

<code>#---第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)/<code>

4.4 第4步:

<code>#---第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?/<code>


分享到:


相關文章: