PyQt5 – 多色边框进度条

  • Post category:Python

下面我将详细讲解Python中 PyQt5 库的多色边框进度条的使用攻略。

什么是多色边框进度条

多色边框进度条,顾名思义,就是在进度条的边框中使用了多种颜色的渐变效果,使进度条具有更好的视觉效果和美观度。

PyQt5中使用多色边框进度条的步骤

PyQt5中使用多色边框进度条的步骤如下:

  1. 在PyQt5中导入QProgressBar和QGradient类
  2. 创建QProgressBar进度条对象
  3. QProgressBar进度条对象设置为多色边框模式
  4. 使用QGradient类实现进度条的渐变效果,包括进度条前景颜色、进度条背景颜色及进度条边框颜色

以下是相应的Python代码示例:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPen, QColor, QLinearGradient
from PyQt5.QtCore import Qt

class ProgressBarDemo(QWidget):
    def __init__(self, parent=None):
        super(ProgressBarDemo, self).__init__(parent)

        # 创建QProgressBar对象
        self.progressBar = QProgressBar(self)
        # 设置QProgressBar为多色边框模式
        self.progressBar.setStyleSheet("""
            QProgressBar{
                border: 2px solid grey;
                border-radius: 9px;
                text-align: center;
                margin: 0px;
                height: 20px;
            }

            QProgressBar::chunk {
                background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0.517, stop:0 rgba(0, 0, 0, 255), stop:0.5 rgba(255, 255, 255, 255), stop:1 rgba(0, 0, 0, 255))
                border-radius: 7px;
            }
        """)

        # 创建垂直布局管理器
        self.vlayout = QVBoxLayout()
        self.vlayout.addWidget(self.progressBar)

        # 设置主布局管理器
        self.setLayout(self.vlayout)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = ProgressBarDemo()
    demo.show()
    sys.exit(app.exec_())

在示例中,我们使用 setStyleSheet() 方法将 QProgressBar 的样式设置为多色边框模式,并使用 QGradient 类实现进度条的渐变效果。你可以更改 qlineargradient 的参数来调整颜色渐变效果以及进度条的边框大小和样式。

具体使用示例

下面我们举两个具体的使用示例。

示例一:进度动态展示

很多情况下,如果您的操作耗时很长,你可能需要在期间展示进度,以便用户知道操作的进展情况。这时你可以使用多色边框进度条,示例如下:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPen, QColor, QLinearGradient
from PyQt5.QtCore import Qt, QThread, pyqtSignal
import time

class ProgressBarThread(QThread):
    progressBarValue = pyqtSignal(int)

    def run(self):
        # 模拟任务操作
        for i in range(1, 101):
            time.sleep(0.1) # 延时操作
            self.progressBarValue.emit(i)

class ProgressBarDemo(QWidget):
    def __init__(self, parent=None):
        super(ProgressBarDemo, self).__init__(parent)

        # 创建QProgressBar对象
        self.progressBar = QProgressBar(self)
        # 设置QProgressBar为多色边框模式
        self.progressBar.setStyleSheet("""
            QProgressBar{
                border: 2px solid grey;
                border-radius: 9px;
                text-align: center;
                margin: 0px;
                height: 20px;
            }

            QProgressBar::chunk {
                background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0.517, stop:0 rgba(0, 0, 0, 255), stop:0.5 rgba(255, 255, 255, 255), stop:1 rgba(0, 0, 0, 255))
                border-radius: 7px;
            }
        """)

        # 创建按钮
        self.button = QPushButton('开始', self)
        self.button.clicked.connect(self.progressBarShow)

        # 创建垂直布局管理器
        self.vlayout = QVBoxLayout()
        self.vlayout.addWidget(self.progressBar)
        self.vlayout.addWidget(self.button)

        # 设置主布局管理器
        self.setLayout(self.vlayout)

    def progressBarValueHandle(self, value):
        self.progressBar.setValue(value)

    def progressBarShow(self):
        self.progressBar.reset()
        # 初始化进度线程
        self.progressBarThread = ProgressBarThread(self)
        self.progressBarThread.progressBarValue.connect(self.progressBarValueHandle)
        # 启动进度线程
        self.progressBarThread.start()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = ProgressBarDemo()
    demo.show()
    sys.exit(app.exec_())

在示例中,我们使用 ProgressBarThread 类实现了一个耗时模拟操作的多线程程序,并通过 QProgressBar 对象对耗时操作的进度进行动态展示。

示例二:自定义进度条样式

如果您对进度条的样式不满意,您可以自定义调整,在下面的示例中,我们实现了自定义进度条样式,并实现了条颜色的渐变,示例如下:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPen, QColor, QLinearGradient
from PyQt5.QtCore import Qt, QThread, pyqtSignal
import time

class ProgressBarThread(QThread):
    progressBarValue = pyqtSignal(int)

    def run(self):
        # 模拟任务操作
        for i in range(1, 101):
            time.sleep(0.1) # 延时操作
            self.progressBarValue.emit(i)

class ProgressBarDemo(QWidget):
    def __init__(self, parent=None):
        super(ProgressBarDemo, self).__init__(parent)

        # 创建QProgressBar对象
        self.progressBar = QProgressBar(self)
        # 设置QProgressBar为多色边框模式
        self.progressBar.setStyleSheet(f"""
            QProgressBar{{ 
                border: 2px solid gray; 
                border-radius: 8px; 
                background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0.618846, stop:0 rgba(172, 238, 93, 255), stop:1 rgba(207, 241, 128, 255)); 
                color: white; 
            }} 
            QProgressBar::chunk{{ 
                background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0.618846, stop:0 rgba(53, 254, 0, 255), stop:1 rgba(116, 249, 189, 255)); 
                border-radius: 7px; 
                margin: 0.5px; 
                width: 5px; 
            }} 
            """)

        # 创建按钮
        self.button = QPushButton('开始', self)
        self.button.clicked.connect(self.progressBarShow)

        # 创建垂直布局管理器
        self.vlayout = QVBoxLayout()
        self.vlayout.addWidget(self.progressBar)
        self.vlayout.addWidget(self.button)

        # 设置主布局管理器
        self.setLayout(self.vlayout)

    def progressBarValueHandle(self, value):
        self.progressBar.setValue(value)

    def progressBarShow(self):
        self.progressBar.reset()
        # 初始化进度线程
        self.progressBarThread = ProgressBarThread(self)
        self.progressBarThread.progressBarValue.connect(self.progressBarValueHandle)
        # 启动进度线程
        self.progressBarThread.start()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = ProgressBarDemo()
    demo.show()
    sys.exit(app.exec_())

在示例中,我们使用了 setStyleSheet() 方法自定义了进度条的外边框,背景颜色,前景条颜色等属性,您可以修改 setStyleSheet() 中的各个参数来自定义您想要的进度条样式。

这就是关于Python中 PyQt5 库的多色边框进度条的完整使用攻略。希望本文能够对您有所帮助。