📜  PyQt5 - 带虚线边框的进度条(1)

📅  最后修改于: 2023-12-03 15:03:56.203000             🧑  作者: Mango

PyQt5 - 带虚线边框的进度条

在 PyQT5 中,进度条是常用的组件之一。在某些情况下,我们需要为进度条添加一个虚线边框来突出显示,这篇文章将会介绍如何实现。

实现步骤
步骤 1:导入必要的库

PyQt5 中的进度条和 QFrame 组件来绘制虚线边框。因此,我们需要导入以下库:

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QProgressBar, QFrame
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPainter, QPen
步骤 2:创建窗口

首先需要先创建一个窗口以及一个垂直布局来放置进度条和边框。代码如下:

class Window(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.setWindowTitle('Progress Bar with Dashed Border')

        layout = QVBoxLayout(self)

        # Add Progress bar
        progress_bar = QProgressBar()
        layout.addWidget(progress_bar)

        # Add Frame around Progress bar
        frame = QFrame()
        frame.setFrameShape(QFrame.Box)
        frame.setFrameShadow(QFrame.Sunken)
        layout.addWidget(frame)

        self.setLayout(layout)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())
步骤 3:绘制虚线边框

我们使用 QFrame 组件来绘制虚线边框。在 QFrame 上绘制线条需要实现 paintEvent() 函数,并使用 QPainter 组件来绘制线条。绘制时应设置线的风格和宽度。

class DashedFrame(QFrame):
    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        painter.setPen(QPen(Qt.DashLine))
        painter.setBrush(Qt.NoBrush)
        painter.drawRect(0, 0, self.width() - 1, self.height() - 1)
        painter.end()
步骤 4: 输出结果

将进度条并列放置 QFrame 上,并为 QFrame 添加边框。

class Window(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.setWindowTitle('Progress Bar with Dashed Border')

        layout = QVBoxLayout(self)

        # Add Progress bar
        progress_bar = QProgressBar()
        layout.addWidget(progress_bar)

        # Add Frame around Progress bar
        frame = DashedFrame()
        frame.setFrameShape(QFrame.Box)
        frame.setFrameShadow(QFrame.Sunken)
        layout.addWidget(frame)

        self.setLayout(layout)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())
结论

在本文中,我们介绍了如何在 PyQt5 中为进度条添加虚线边框。我们创建了一个窗口作为布局,将进度条和虚线边框放入其中。虚线边框的实现通过 QFrame 组件来完成。