PythonGUI之创建一个圆形进度条控件:RoundProgress
- IT业界
- 2025-09-22 09:51:02

在图形用户界面(GUI)设计中,进度条是一种常见的元素,用于直观地展示任务的完成进度。实现自定义圆形进度条控件,这个控件不仅具有基本的进度显示功能,还支持多种颜色自定义和渐变效果。
文章目录 功能概述控件设计核心代码解析初始化方法动态更新方法绘制方法 使用示例总结 功能概述这个圆形进度条控件的主要功能包括:
自定义颜色:可以分别设置外圆、内圆、进度条渐变起始和结束颜色,以及进度文本的颜色。动态更新:通过调用 parameterUpdate 方法,可以实时更新进度条的进度值,并自动刷新显示。渐变效果:进度条支持从起始颜色到结束颜色的渐变效果,使进度条看起来更加美观。无边框与透明背景:窗口无边框且背景透明,使其可以更好地融入不同的界面设计。 控件设计这个控件的设计基于 PyQt5 的 QWidget 类,通过重写 paintEvent 方法来实现自定义绘制。以下是控件的主要设计思路:
窗口设置:通过 setWindowFlags 和 setAttribute 方法,去除窗口边框并设置背景透明。颜色参数:在初始化时,通过参数传递设置外圆、内圆、进度条渐变颜色和文本颜色。绘制逻辑:在 paintEvent 方法中,使用 QPainter 对象进行绘制,包括外圆、内圆、进度条和进度文本。动态更新:通过 parameterUpdate 方法更新进度值,并调用 update 方法触发界面刷新。 核心代码解析 初始化方法 def __init__(self, outer_color="#5F89FF", inner_color="#01224D", progress_color_start="#95BBFF", progress_color_end="#5C86FF", text_color="#5481FF"): super(RoundProgress, self).__init__() self.setWindowFlags(Qt.FramelessWindowHint) # 去边框 self.setAttribute(Qt.WA_TranslucentBackground) # 设置窗口背景透明 self.persent = 20 # 初始进度值 # 设置颜色参数 self.outer_color = outer_color # 外圆颜色 self.inner_color = inner_color # 内圆颜色 self.progress_color_start = progress_color_start # 进度条渐变起始颜色 self.progress_color_end = progress_color_end # 进度条渐变结束颜色 self.text_color = text_color # 文字颜色 在初始化方法中,设置了窗口的无边框和透明背景属性。初始化了进度值 persent 和各种颜色参数,这些参数可以通过构造函数进行自定义。 动态更新方法 def parameterUpdate(self, p): self.persent = p self.update() 这个方法用于更新进度值 persent,并通过调用 update 方法触发界面的重新绘制。 绘制方法 def paintEvent(self, event): rotateAngle = 360 * self.persent / 100 painter = QPainter(self) painter.setRenderHints(QtGui.QPainter.Antialiasing) painter.setPen(QtCore.Qt.NoPen) painter.setBrush(QBrush(QColor(self.outer_color))) painter.drawEllipse(10, 10, 120, 120) # 画外圆 painter.setBrush(QBrush(QColor(self.inner_color))) painter.drawEllipse(12, 12, 116, 116) # 画内圆 gradient = QConicalGradient(60, 60, 91) gradient.setColorAt(0, QColor(self.progress_color_start)) gradient.setColorAt(1, QColor(self.progress_color_end)) self.pen = QPen() self.pen.setBrush(gradient) self.pen.setWidth(10) self.pen.setCapStyle(Qt.RoundCap) painter.setPen(self.pen) painter.drawArc(QtCore.QRectF(10, 10, 120, 120), (90 - 0) * 16, -rotateAngle * 16) # 画圆环 font = QtGui.QFont() font.setFamily("Microsoft YaHei") font.setPointSize(14) painter.setFont(font) painter.setPen(QColor(self.text_color)) painter.drawText(QtCore.QRectF(10, 10, 120, 120), Qt.AlignCenter, "%d%%" % self.persent) 绘制外圆和内圆:使用 QPainter 的 drawEllipse 方法绘制外圆和内圆。绘制进度条:使用 QConicalGradient 创建一个圆锥渐变效果,并通过 QPen 设置渐变画刷,然后使用 drawArc 方法绘制圆环。绘制进度文本:设置字体和颜色,使用 drawText 方法在圆心位置绘制进度百分比文本。 使用示例以下是使用这个圆形进度条控件的示例代码:
if __name__ == '__main__': app = QApplication(sys.argv) RoundProgress = RoundProgress() RoundProgress.show() sys.exit(app.exec_())运行上述代码后,将显示一个初始进度为 20% 的圆形进度条,可以通过调用 parameterUpdate 方法动态更新进度值,例如:
RoundProgress.parameterUpdate(50) # 更新进度为 50% 总结通过上述代码实现了一个功能丰富且美观的圆形进度条控件。它支持多种颜色自定义和渐变效果,能够动态更新进度值,并且具有无边框和透明背景的特性。这种控件可以广泛应用于各种需要进度显示的场景中,为用户界面增添视觉吸引力。
PythonGUI之创建一个圆形进度条控件:RoundProgress由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“PythonGUI之创建一个圆形进度条控件:RoundProgress”