下面是Python的PyQt5中,如何改变进度条的边框的完整使用攻略,进度条的边框是指进度条的外围线条:
- PyQ5中进度条的边框样式常用的属性是QProgressBar::chunk,可以通过设置此属性的值更改进度条边框的样式,如下所示:
import sys
from PyQt5.QtWidgets import QApplication, QProgressBar, QWidget
class MyProgressBar(QWidget):
def __init__(self, parent=None):
super(MyProgressBar, self).__init__(parent)
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('PyQt5 - 改变进度条的边框')
self.progressBar = QProgressBar(self)
self.progressBar.setGeometry(20, 50, 200, 30)
self.progressBar.setValue(50)
self.show()
# 设置进度条的边框
style = """
QProgressBar {
border: 2px solid green;
border-radius: 5px;
text-align: center;
}
QProgressBar::chunk {
background-color: #CD96CD;
height: 20px;
border-radius: 5px;
}
"""
self.progressBar.setStyleSheet(style)
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = MyProgressBar()
sys.exit(app.exec_())
在上面的代码中,我们创建了一个自定义窗口类MyProgressBar,将进度条添加到窗口中,然后通过setStyleSheet()方法来设置进度条的边框,使用CSS的样式来定义边框。
其中,在样式表中,我们使用QProgressBar::chunk来指定进度条的样式,设置了进度条的边框线条颜色、宽度、高度和边缘半径。你可以根据需要,修改样式表中的属性来适配自己的应用场景。
- 另一种改变进度条的边框的方式是,利用QStyle类的drawControl()方法,通过绘制动态边框来实现。具体代码如下:
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPainter, QColor, QPen
from PyQt5.QtWidgets import *
class MyProgressBar(QWidget):
def __init__(self, parent=None):
super(MyProgressBar, self).__init__(parent)
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('PyQt5 - 改变进度条的边框')
self.progressBar = QProgressBar(self)
self.progressBar.setGeometry(20, 50, 200, 30)
self.progressBar.setValue(50)
self.show()
def paintEvent(self, event):
# 利用QStyle类的drawControl()方法,绘制动态边框
opt = QStyleOptionProgressBarV2()
opt.initFrom(self.progressBar)
opt.rect = self.progressBar.rect()
opt.text = ''
painter = QPainter(self)
self.style().drawControl(QStyle.CE_ProgressBarGroove, opt, painter, self.progressBar)
self.style().drawControl(QStyle.CE_ProgressBarContents, opt, painter, self.progressBar)
progress = self.progressBar.value() * (opt.rect.width() - 2) / self.progressBar.maximum()
r = QRect(opt.rect)
r.setWidth(progress)
r.setHeight(opt.rect.height() - 2)
if progress > 0:
self.style().drawControl(QStyle.CE_ProgressBarContents, opt, painter, self.progressBar)
pen = QPen(QColor('green'))
pen.setWidth(2)
painter.setPen(pen)
painter.drawRect(r.adjusted(0, 0, -1, -1))
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = MyProgressBar()
sys.exit(app.exec_())
在上面的代码中,我们重新实现了自定义窗口类MyProgressBar中的paintEvent()方法,其中通过QStyle类的drawControl()方法,绘制出了进度条的动态边框,然后使用QPainter类绘制出矩形边框,并调整矩形宽度和高度,最后使用QPen类来定义矩形边框的颜色、宽度,最后绘制出来。
总之,在Python的PyQt5中改变进度条的边框,实现方法有很多,可以根据需求和实际情况,选择适合自己的方法。