📅  最后修改于: 2023-12-03 15:03:56.080000             🧑  作者: Mango
本文将介绍如何使用 PyQt5 创建一个多色边框的进度条。
PyQt5 是一个流行的 Python GUI 框架,用于创建漂亮且具有相应功能的应用程序。它是 PyQt 的最新版本,支持 Qt5 所有功能以及 PyQt 常用的特性。
实现本程序需要以下库:
from PyQt5.QtCore import Qt, QPropertyAnimation, QTimer, QRect, QSize
from PyQt5.QtGui import QPainter, QColor, QFont, QPen
from PyQt5.QtWidgets import QApplication, QWidget, QProgressBar
下面是程序的主要部分。
class BorderProgressBar(QProgressBar):
def __init__(self, parent):
super(BorderProgressBar, self).__init__(parent)
# 设置动画、字体、刻度线等
self.animation = QPropertyAnimation(self, b"value")
self.animation.setDuration(1000)
self.timer = QTimer(self)
self.timer.timeout.connect(self._update)
self.setStyleSheet('QProgressBar::chunk {background-color: red;}')
font = QFont()
font.setPointSize(10)
self.setFont(font)
self.setAlignment(Qt.AlignCenter)
self.setFormat("0%")
self.setMinimum(0)
self.setMaximum(100)
def start(self, duration):
self.animation.setStartValue(0)
self.animation.setEndValue(100)
self.animation.start()
self.timer.start(duration // 100)
def _update(self):
value = self.animation.currentValue()
self.setFormat(f"{value}%")
self.update()
if not self.animation.running():
self.timer.stop()
def paintEvent(self, event):
painter = QPainter(self)
painter.setRenderHint(QPainter.Antialiasing)
# 绘制进度条底色
rect = QRect(0, 0, self.width() - 1, self.height() - 1)
painter.setPen(QPen(QColor(128, 128, 128)))
painter.drawRect(rect)
# 绘制进度条颜色
value = self.animation.currentValue()
fraction = value / 100
rect = QRect(0, 0, (self.width() - 1) * fraction, self.height() - 1)
gradient = QLinearGradient(rect.topLeft(), rect.topRight())
gradient.setColorAt(0, QColor(230, 230, 230))
gradient.setColorAt(0.5, QColor(128, 128, 128))
gradient.setColorAt(1, QColor(230, 230, 230))
painter.setBrush(QColor(128, 128, 128))
painter.drawRect(rect)
# 绘制进度条边框
painter.setPen(QPen(QColor(0, 162, 232), 2))
painter.setBrush(Qt.NoBrush)
painter.drawRect(QRect(0, 0, self.width() - 1, self.height() - 1))
painter.end()
程序的核心是绘制 QProgressBar
的外边框,进度条底色和进度条颜色。我们使用 paintEvent
方法绘制控件,使用 QPropertyAnimation
和 QTimer
控制进度条颜色变化和动画。
if __name__ == '__main__':
app = QApplication([])
window = QWidget()
window.setFixedSize(300, 60)
progress_bar = BorderProgressBar(window)
progress_bar.setGeometry(20, 20, 260, 20)
window.show()
progress_bar.start(5000)
app.exec_()
运行程序,可以看到进度条按照预定的时间从 0 变化到 100。
程序演示效果如下:
本文介绍了如何使用 PyQt5 创建一个多色边框的进度条。我们使用了 QPropertyAnimation
和 QTimer
控制进度条颜色变化和动画,以及 paintEvent
方法绘制整个进度条。
代码已上传至 Github。