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 QCalendarWidget – 使用类型获取子节点

    下面是PyQt5 QCalendarWidget-使用类型获取子节点的完整使用攻略: 1. 概述 QCalendarWidget是PyQt5中的一个日历部件,可以显示日历并允许用户选择日期。在使用QCalendarWidget时,有时我们需要获取日历中的子节点,这时可以使用findChildren()方法。该方法可以通过指定类型获取该类型的所有子节点。 2.…

    python 2023年5月12日
    00
  • PyQt5 – 当单选按钮被按下时为其设置皮肤

    下面是关于如何使用PyQt5为单选按钮设置皮肤的完整攻略。 1. 确认环境 在开始学习PyQt5之前,需要确认已安装Python和PyQt5。可以通过运行以下命令来检查: python –version pip list | grep PyQt5 2. 创建窗口 首先,我们需要从PyQt5.QtWidgets导入QWidget、QRadioButton和Q…

    python 2023年5月11日
    00
  • PyQt5 – 为不可编辑组合框的行编辑部分设置皮肤

    下面是PyQt5为不可编辑组合框的行编辑部分设置皮肤的使用攻略。需要注意的是,这里使用的PyQt5版本为5.15.4。 1. 设置LineEdit的皮肤样式 我们可以使用QSS来设置LineEdit的皮肤样式。QSS(Qt Style Sheets)是QT框架的一种样式表语言,可以用于描述QT界面部件的外观和布局。 下面是一个简单的设置LineEdit皮肤样…

    python 2023年5月11日
    00
  • PyQt5 QCommandLinkButton – 图标改变的信号

    PyQt5中的QCommandLinkButton是一种可以显示图标和文本的按钮控件,可以用于创建一些交互性的用户界面。本文将详细讲解QCommandLinkButton控件的图标改变信号的使用方法,包括连接信号、定义槽函数、设置图标和响应信号。 连接信号 QCommandLinkButton图标改变信号的名称为clicked,通过connect()函数将该…

    python 2023年5月12日
    00
  • PyQt5 QSpinBox – 检查是否启用了角标

    PyQt5是Python语言的一个GUI编程库,它提供了一系列的组件和工具包,可以帮助用户快速开发出漂亮的界面应用程序。其中QSpinBox是PyQt5库中常用的框组件之一,通常用来获取和设置整数值。而检查是否启用了角标,则是在使用QSpinBox时,判断在框中是否有一个正号或者负号。 下面是关于PyQt5 QSpinBox-检查是否启用了角标的完整使用攻略…

    python 2023年5月12日
    00
  • PyQt5 QCalendarWidget 设置鼠标双击事件

    下面是详细的讲解。 PyQt5 QCalendarWidget设置鼠标双击事件 在 PyQt5 中,QCalendarWidget 是一个非常常用的控件,它可以用来显示和选择日期,而且支持鼠标的单击和双击事件。下面我会详细说明如何设置 PyQt5 QCalendarWidget 的鼠标双击事件。 步骤一:创建 QCalendarWidget 首先,我们需要创…

    python 2023年5月11日
    00
  • PyQt5 QCalendarWidget 为所有状态的下个月的按钮设置边框

    PyQt5 QCalendarWidget提供了一些很方便的方法和属性,可以方便我们设置日历控件的各种状态,包括设置下个月按钮的边框。下面是完整的使用攻略: 步骤一:引入PyQt5 QCalendarWidget模块 要使用PyQt5 QCalendarWidget,首先需要将它引入项目中: from PyQt5.QtWidgets import QCale…

    python 2023年5月12日
    00
  • PyQt5 QCalendarWidget 获取给定名称对应的属性值

    以下是关于Python的PyQt5 QCalendarWidget获取给定名称对应的属性值的完整使用攻略。首先,我们需要了解一下QCalendarWidget控件,它是一个可选的日期选择器控件,用于选择日期,而且可以根据需求自定义样式。QCalendarWidget类继承自QWidget类,因此具有QWidget的所有属性和方法,例如sizePolicy()…

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