PyQt5 – 试管式进度条

下面我将为您介绍Python中PyQt5中试管式进度条的完整使用攻略。

1. 安装PyQt5

如果您还没有安装PyQt5,可以通过以下命令在命令行中安装:

pip install PyQt5

2. 导入PyQt5库

在使用PyQt5之前,需要先将PyQt5库导入到您的代码中:

from PyQt5.QtWidgets import QApplication, QWidget, QProgressBar, QVBoxLayout
from PyQt5.QtCore import Qt, QThread, pyqtSignal

其中,QApplicationQWidget用于创建Qt应用和窗口,QProgressBar用作进度条的控件,QVBoxLayout用于指定进度条的布局方式。Qt是一个包含Qt中定义的一些核心常量和函数的命名空间。QThread用于创建一个线程,pyqtSignal用于在不同的线程之间进行信号通讯。

3. 创建进度条

创建进度条并指定它的方向、最小值和最大值:

progress = QProgressBar()
progress.setOrientation(Qt.Vertical)  # 设置进度条为垂直方向
progress.setMinimum(0)
progress.setMaximum(100)

setOrientation指定进度条的方向为垂直方向,其它常量可以是Qt.Horizontal表示水平方向。

4. 指定进度条的父控件和布局方式

我们创建一个QWidget用作进度条的父控件,并将其指定为QProgressBar的父控件。使用QVBoxLayout将进度条添加到QWidget中。

app = QApplication([])
window = QWidget()
layout = QVBoxLayout()

layout.addWidget(progress)
window.setLayout(layout)
window.show()

5. 创建一个线程类

class Worker(QThread):
    progressValueChanged = pyqtSignal(int)

    def run(self):
        for i in range(101):
            self.progressValueChanged.emit(i)
            self.msleep(100)

这个类继承了QThread,并重写了run方法。在run方法中,我们通过emit方法发送一个progressValueChanged信号,这个信号包含一个整数参数,表示当前进度。

6. 连接信号和槽函数

worker = Worker()
worker.progressValueChanged.connect(progress.setValue)

这里我们创建了一个Worker对象,然后将progressValueChanged信号连接到progress.setValue槽函数,每当progressValueChanged信号被发射时,progress.setValue槽函数就会被调用,更新进度条的值。

7. 启动线程

worker.start()

这里我们启动了worker线程,它会在后台循环更新进度条的值,直到进度条达到100。

示例1:利用PyQt5制作简易进度条

from PyQt5.QtWidgets import QApplication, QWidget, QProgressBar, QVBoxLayout
from PyQt5.QtCore import Qt, QThread, pyqtSignal
import sys


class Worker(QThread):
    progressValueChanged = pyqtSignal(int)

    def run(self):
        for i in range(101):
            self.progressValueChanged.emit(i)
            self.msleep(100)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = QWidget()
    layout = QVBoxLayout()

    progress = QProgressBar()
    progress.setOrientation(Qt.Vertical)
    progress.setMinimum(0)
    progress.setMaximum(100)

    layout.addWidget(progress)
    window.setLayout(layout)
    window.show()

    worker = Worker()
    worker.progressValueChanged.connect(progress.setValue)
    worker.start()

    sys.exit(app.exec_())

运行这个例子,可以看到一个简单的垂直方向的进度条在后台更新。

示例2:为进度条添加自定义样式

from PyQt5.QtWidgets import QApplication, QWidget, QProgressBar, QVBoxLayout
from PyQt5.QtCore import Qt, QThread, pyqtSignal
from PyQt5.QtGui import QPixmap, QPainter, QColor
import sys


class Worker(QThread):
    progressValueChanged = pyqtSignal(int)

    def run(self):
        for i in range(101):
            self.progressValueChanged.emit(i)
            self.msleep(100)


class CustomProgressBar(QProgressBar):
    def __init__(self):
        super().__init__()

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)

        # 矩形背景
        painter.setPen(Qt.NoPen)
        painter.setBrush(QColor(243, 243, 243))
        painter.drawRect(0, 0, self.width(), self.height())

        # 进度条
        value = self.value()
        painter.setBrush(QColor(255, 96, 84))
        if value > 0:
            painter.drawRoundedRect(0, (100 - value) * self.height() / 100, self.width(), self.height() * value / 100, 20, 20)

        # 图标
        icon = QPixmap('icon.png')
        icon_rect = icon.rect()
        painter.drawPixmap(self.width() / 2 - icon_rect.width() / 2, self.height() / 2 - icon_rect.height() / 2, icon)

        # 文字
        font = painter.font()
        font.setPointSize(14)
        painter.setFont(font)
        painter.drawText(0, 0, self.width(), self.height(), Qt.AlignCenter, '{} %'.format(value))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = QWidget()
    layout = QVBoxLayout()

    progress = CustomProgressBar()
    progress.setMinimum(0)
    progress.setMaximum(100)

    layout.addWidget(progress)
    window.setLayout(layout)
    window.show()

    worker = Worker()
    worker.progressValueChanged.connect(progress.setValue)
    worker.start()

    sys.exit(app.exec_())

运行这个例子,可以看到一个自定义的垂直方向进度条,可以呈现自己定义的样式。其中,paintEvent方法用于绘制进度条的背景、进度条、图标和文字。通过继承QProgressBar,我们可以轻松地自定义这个控件的样式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 – 试管式进度条 - Python技术站

(0)
上一篇 2023年5月11日
下一篇 2023年5月11日

相关文章

  • PyQt5 – 检查单选按钮是否从左到右排列

    PyQt5是Python编程语言的GUI框架,可以快捷地创建功能强大的图形用户界面。在PyQt5中,可以实现单选按钮的左右排列,并通过相应的API来检查单选按钮是否从左到右排列。本文将提供PyQt5 – 检查单选按钮是否从左到右排列的完整使用攻略。 检查单选按钮是否从左到右排列 – 原理 PyQt5提供了QBoxLayout类作为布局管理器,用于管理窗口中各…

    python 2023年5月10日
    00
  • PyQt5组合框 当它不可编辑和处于状态时的不同边框颜色

    使用PyQt5的组合框(QComboBox)时,我们可以设置它的编辑模式和状态(可编辑或不可编辑,可用或不可用等),对于不同的模式和状态,组合框的边框颜色也会有所不同。 设置组合框的编辑模式和状态 PyQt5中,我们可以通过setEditable()方法和setEnabled()方法来设置QComboBox的编辑模式和状态,其中: setEditable()…

    python 2023年5月11日
    00
  • PyQt5 QSpinBox – 获取浮点尺寸 | pointSizeF() 方法

    PyQt5是一种基于Qt库的Python界面开发框架。PyQt5中的QSpinBox控件用于让用户通过指定数字的方式输入数据。QSpinBox的文本框中的数字可以是整数或浮点数。 QSpinBox控件具有许多有用的方法,包括pointSizeF()方法,该方法返回SpinBox控件中当前字体的点大小的浮点值。下面是关于如何使用pointSizeF()方法的示…

    python 2023年5月12日
    00
  • PyQt5–创建绘画应用

    下面是关于“PyQt5–创建绘画应用”的完整使用攻略。 1. 准备工作 在开始创建绘画应用之前,需要进行一些准备工作,分别是安装PyQt5和导入相关模块。 1.1 安装PyQt5 可以使用pip命令来安装PyQt5,具体命令如下: pip install PyQt5 1.2 导入相关模块 在创建绘画应用时,需要使用到以下几个模块: import sys f…

    python 2023年5月10日
    00
  • PyQt5 QColorDialog – 拒绝信号

    PyQt5 是一个 Python 编写的 GUI 应用框架。而 QColorDialog 是 PyQt5 中与颜色选择有关的窗口控件。其中,“拒绝信号”是一个特殊信号,当用户点击 QColorDialog 窗口的“取消”按钮时,该信号被触发,这时我们可以选择执行一些操作。 下面,我将介绍如何在 PyQt5 中使用 QColorDialog 控件,并注意拒绝信…

    python 2023年5月12日
    00
  • PyQt5 – 如何清除标签的内容|清除和设置文本方法

    PyQt5是Python编程语言下的一种GUI编程工具包,使用它可以构建漂亮、人性化的界面。在PyQt5中,清除标签的内容和设置文本是实现界面交互的两个重要方面。 清除标签的内容 PyQt5中清除标签的内容一般使用label.clear()方法。该方法将标签中的文本清除,使其内容为空。以下是一个示例: import sys from PyQt5.QtWidg…

    python 2023年5月10日
    00
  • PyQt5 QCommandLinkButton – 设置自动独占属性

    下面是关于Python PyQt5中QCommandLinkButton的自动独占属性的使用攻略。 PyQt5 QCommandLinkButton QCommandLinkButton是PyQt5中的一个重要的组件,它颜色鲜艳,样式独特,用于在窗口中添加独占的命令链接按钮。它提供了自定义文本、图标和活动状态的功能,并支持各种大小和方向的按钮。 设置自动独占…

    python 2023年5月12日
    00
  • PyQt5 QSpinBox – 当被按下时为上升按钮添加边框

    PyQt5是Python的GUI编程框架,提供了丰富的组件用于构建应用程序界面,其中QSpinBox是用于输入数字的控件,用户可通过按下带有上下箭头的按钮来增加或减少数值。 如果想要为QSpinBox的上升按钮增加边框,在PyQt5中的实现方法如下: 使用QSpinBox的样式表设置边框: spinbox.setStyleSheet("QSpinB…

    python 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部