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 QDateTimeEdit – 设置显示格式

    Python PyQt5是一种常用的GUI编程框架,QDateTimeEdit是PyQt5中的日期时间编辑控件。QDateTimeEdit控件可以显示和编辑日期和时间,并且可以根据需要自定义控件的显示格式。本文将详细介绍PyQt5 QDateTimeEdit控件的设置显示格式方法。 设置QDateTimeEdit控件的显示格式 QDateTimeEdit控件…

    python 2023年5月12日
    00
  • PyQt5 QDateTimeEdit – 清除布局方向属性

    下面我来给你详细讲解Python中PyQt5的QDateTimeEdit控件的“clearLayoutDirection()”方法的使用攻略。 1. 前置知识 在介绍“clearLayoutDirection()”方法之前,我们需要先了解一些基础知识。QDateTimeEdit控件是PyQt5中的一个控件,可以用于选择日期和时间。而“布局方向属性”指的是控件…

    python 2023年5月12日
    00
  • PyQt5 QCalendarWidget 获取自动填充背景属性

    PyQt5是Python中的一种GUI框架,可以用于创建各种类型的桌面应用程序。QCalendarWidget是PyQt5中的一个小部件,用于显示日历并允许用户选择日期。 QCalendarWidget有一个重要的属性叫做“自动填充背景”。当启用此属性时,QCalendarWidget会在每个格子中自动填充一个颜色,以反映与该日期关联的任何事件。 以下是Py…

    python 2023年5月12日
    00
  • PyQt5 QLabel 根据用户指令禁用颜色效果

    Python中的PyQt5库提供了QLabel类来在GUI应用程序中显示文本或图像。在一些情况下,我们需要根据用户指令禁用QLabel的颜色效果。下面我将详细讲解如何实现此功能。 一、禁用QLabel的颜色效果 我们可以使用setStyleSheet()方法来设置QLabel的样式表,从而实现禁用颜色效果的目的。具体实现步骤如下: 使用QPalette获取Q…

    python 2023年5月13日
    00
  • PyQt5 QColorDialog – 设置边框

    QColorDialog是PyQt5中的一个内置对话框类,可以用于选择颜色。可以通过QColorDialog中的一些方法设置其边框的样式。下面将详细讲解如何使用PyQt5 QColorDialog进行边框设置。 显示QColorDialog 要显示QColorDialog,首先需要创建QColorDialog对象并使用exec_()方法显示对话框。具体的代码…

    python 2023年5月12日
    00
  • PyQt5 QCalendarWidget – 检查编辑焦点属性

    下面是关于Python中PyQt5 QCalenderWidget控件检查编辑焦点属性的完整使用攻略。 1. QCalenderWidget控件简介 QCalenderWidget是PyQt5中提供的一个日期选择控件,内置有日历、月历和年历等多种模式。它可以帮助我们在图形化界面中方便地展示和选择日期。 2. 检查编辑焦点属性方法 当我们需要在编写代码时检查Q…

    python 2023年5月12日
    00
  • PyQt5 QSpinBox – 获取特殊值文本

    PyQt5是一个基于Python的GUI编程框架,其中QSpinBox是一个常用的控件,用于允许用户通过面板或者键盘输入来选择数字。在使用QSpinBox时,经常需要获取用户选择的数字和特殊值文本。本文将详细介绍如何使用PyQt5 QSpinBox来获取特殊值文本。 步骤 1:导入必要的库 在开始使用PyQt5 QSpinBox之前,首先需要导入相应的库,使…

    python 2023年5月12日
    00
  • PyQt5 QSpinBox – 获取可见区域

    PyQt5 QSpinBox是一种用于输入数字的可调节小部件。有时我们需要获取QSpinBox的可见区域,即用户看到的部分。本文将详细讲解如何实现获取QSpinBox可见区域的方法。 获取QSpinBox可见区域的方法 要获取QSpinBox的可见区域,可以使用Viewport方法来实现。Viewport是QWidget的一个内建函数,用于返回QWidget…

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