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中如何为组合框设置视图的完整使用攻略: 1. PyQt5中的组合框 在PyQt5中,组合框是常用的一种UI组件,也称为下拉框或下拉菜单。组合框由一个文本框和一个下拉列表组成,用户可以在文本框中输入文本或从下拉列表中选择一项。 2. 设置组合框视图 在PyQt5中,我们可以通过设置QComboBox的视图实现特定的下拉列表效果。QCombo…

    python 2023年5月10日
    00
  • PyQt5 QCalendarWidget – 转储日历树

    下面为您详细讲解Python中PyQt5库中的QCalendarWidget控件的使用攻略。QCalendarWidget是一个用于用户选择日期的控件,它可以展示一个日历图形界面。可以通过该控件的信号和槽机制来获得用户选择的日期,实现对日期的相关操作。 1. 安装PyQt5 在使用QCalendarWidget之前,需要安装PyQt5库。可以通过以下命令在终…

    python 2023年5月12日
    00
  • PyQt5 – 火焰计算器

    下面为你详细讲解Python的 “PyQt5 – 火焰计算器” 的完整使用攻略。 什么是PyQt5 – 火焰计算器 PyQt5 – 火焰计算器是一款利用Python语言和PyQt5库开发的图形界面计算器。它包含了常用的加、减、乘、除和求幂等基本计算功能,同时还可以计算火焰传播速度、温度变化和火焰传播距离等数据。可以方便地用于工程设计中。 安装PyQt5库 在…

    python 2023年5月10日
    00
  • PyQt5 QDateEdit – 移除用户可以输入的最大日期

    PyQt5是Python中的一种GUI工具库,通过它我们可以快速创建各种界面。其中,QDateEdit控件是一种用于日期选择的控件。在使用该控件时,我们有时需要限制用户输入的日期范围,本文将讲解如何通过PyQt5中的QDateEdit控件移除用户可以输入的最大日期限制。 步骤1:导入模块 在使用QDateEdit之前,我们需要先导入必要的模块。以下是导入Py…

    python 2023年5月12日
    00
  • PyQt5 使用Qt Designer

    当你需要使用Python进行桌面应用程序开发时,PyQt5是一个非常好的选择。PyQt5是基于Qt5的Python绑定库,它可以让你使用Python语言来创建深度定制化的GUI窗口应用程序。其中,Qt Designer是一个可视化的图形UI构建工具,它可以帮助你快速创建GUI应用程序。 本文将详细介绍如何使用PyQt5和Qt Designer来构建Pytho…

    python 2023年5月12日
    00
  • PyQt5 QCalendarWidget 获取有效ID

    下面是详细讲解Python中PyQt5 QCalendarWidget获取有效ID的完整使用攻略: 1. QCalendarWidget概述 QCalendarWidget是PyQt5中提供的一个日期选择的工具类,可以方便地选择指定的日期。可以通过信号和槽函数来处理日历的选择事件。 2. 获取有效ID的方法 对于QCalendarWidget控件,没有提供直…

    python 2023年5月12日
    00
  • PyQt5标签 – 设置阴影的偏移量

    PyQt5是Python编写的,使用Qt库的GUI应用程序开发框架。其中,PyQt5标签是一种用于显示文本或图像的GUI控件,支持设置阴影的偏移量。以下是PyQt5标签设置阴影偏移量的完整使用攻略。 1. 创建PyQt5标签控件 要设置PyQt5标签的阴影偏移量,首先需要创建一个PyQt5标签控件。可以通过以下代码创建一个PyQt5标签控件。 from Py…

    python 2023年5月11日
    00
  • PyQt5 QColorDialog – 检查尺寸握持属性是否启用

    当在PyQt5中设计使用者界面时,常常需要使用到颜色对话框(QColorDialog)。其中,检查尺寸握持属性是否启用是一个重要的功能,可以帮助我们更好地应用这个控件。 创建QColorDialog 首先,我们需要创建一个QColorDialog。这可以通过如下代码实现: from PyQt5.QtWidgets import QApplication, Q…

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