PyQt5 如何在进度条中显示小数点值

PyQt5中的进度条控件默认只支持整数类型的进度值,无法直接显示小数点值。然而,在一些需求场景中,需要展示小数点进度值,为此我们需要针对进度条控件进行一些自定义设置,实现自定义进度条控件的效果。

以下是实现自定义进度条控件的过程:

  1. 导入所需模块

首先,需要导入PyQt5模块,以及QtGui、QtWidgets等相关模块。以下为示例代码:

from PyQt5 import QtGui, QtWidgets
  1. 创建自定义进度条控件类

接着,创建一个自定义进度条控件类,并从QProgressBar类继承,以便进行细致的自定义设置。以下为示例代码:

class DecimalProgressBar(QtWidgets.QProgressBar):
    def __init__(self, parent=None):
        super(DecimalProgressBar, self).__init__(parent)

在上述代码中,首先创建了一个名为DecimalProgressBar的自定义进度条控件类,并从QtWidgets.QProgressBar类继承了一些基本的控件特性。

  1. 定义小数点位数

在QProgressBar控件中,可以用setValue()方法来设置进度条进度值。而在自定义进度条控件中,我们需要进一步定义小数点位数。以下为示例代码:

class DecimalProgressBar(QtWidgets.QProgressBar):
    def __init__(self, parent=None, decimals=1):
        super(DecimalProgressBar, self).__init__(parent)
        self._decimals = decimals

    def setValue(self, value):
        self.value = value
        self.setFormat('%v.%d' % (value, self._decimals))
        QtWidgets.QProgressBar.setValue(self, int(value * (10 ** self._decimals)))

在上述代码中,我们首先重载了setValue()方法,以便对setValue()方法进行自定义的处理。其中,value属性用于存储传入进度值的数据,setFormat()方法用于设置进度条数值的显示格式。

在该示例代码中,%v占位符表示实际值,而%d占位符表示小数点位数。使用setFormat()方法将小数点位数格式化后,再使用QtWidgets.QProgressBar.setValue()方法对进度值进行转换并赋值。

  1. 创建自定义进度条控件实例

最后,我们使用上述自定义进度条控件类创建实例,并在界面中显示出来。以下为示例代码:

class MainWidget(QtWidgets.QWidget):
    def __init__(self):
        super(MainWidget, self).__init__()
        self.progressbar = DecimalProgressBar(self)
        self.layout = QtWidgets.QHBoxLayout(self)
        self.layout.addWidget(self.progressbar)

在该示例代码中,我们创建了一个名为MainWidget的主窗口界面,并在其中使用DecimalProgressBar类创建了一个进度条实例,并将其添加到水平布局中进行显示。这样就完成了自定义进度条控件的整个过程。

示例1:简单示例

以下是一个简单的示例,展示了如何使用自定义进度条控件在进度条中显示小数点值。我们首先创建了一个DecimalProgressBar类,并在其中设置小数点位数为1:

class DecimalProgressBar(QtWidgets.QProgressBar):
    def __init__(self, parent=None, decimals=1):
        super(DecimalProgressBar, self).__init__(parent)
        self._decimals = decimals

    def setValue(self, value):
        self.value = value
        self.setFormat('%v.%d' % (value, self._decimals))
        QtWidgets.QProgressBar.setValue(self, int(value * (10 ** self._decimals)))

接着,我们创建了一个MainWidget窗口类,并在其中实例化了上述DecimalProgressBar控件,并添加到主窗口中:

class MainWidget(QtWidgets.QWidget):
    def __init__(self):
        super(MainWidget, self).__init__()
        self.progressbar = DecimalProgressBar(self)
        self.layout = QtWidgets.QHBoxLayout(self)
        self.layout.addWidget(self.progressbar)

        timer = QtCore.QTimer(self)  
        timer.timeout.connect(self.update_progressbar)
        timer.start(50)
        self._step = 0.001

    def update_progressbar(self):
        self.progressbar.setValue(self.progressbar.value + self._step)

在上述代码中,我们使用了一个定时器模拟进度变化,并通过setValue()方法实现了进度条控件的更新。

示例2:实际应用

以下是一个实际应用场景的示例,展示了如何使用自定义进度条控件展示进度下载的进度。我们首先创建了一个DownloadWindow类,并定义窗口中的一些控件:

class DownloadWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        self.progress = DecimalProgressBar(self)
        self.statusbar = QtWidgets.QStatusBar()
        self.statusbar.addWidget(self.progress)
        self.setStatusBar(self.statusbar)

        self.central_widget = QtWidgets.QWidget()
        self.setCentralWidget(self.central_widget)

        self.layout = QtWidgets.QVBoxLayout()
        self.central_widget.setLayout(self.layout)

        self.button = QtWidgets.QPushButton("Download")
        self.button.clicked.connect(self.download)
        self.layout.addWidget(self.button)

接着,我们定义了download()方法,用于实现下载进度的更新:

    def download(self):
        self.button.setDisabled(True)

        def _download():
            for i in range(0, 100):
                time.sleep(0.05)
                QtWidgets.QApplication.processEvents()
                self.progress.setValue((i + 1) / 100)

        thread = threading.Thread(target=_download)
        thread.start()

        self.thread_waiter(thread)

    def thread_waiter(self, thread):
        if thread.is_alive():
            thread.join()
        self.button.setDisabled(False)

在该方法中,我们使用了一个线程模拟下载过程,并在下载过程中通过setValue()方法更新进度条控件的值。

最后,我们在主函数中创建了DownloadWindow类的实例,并显示出来:

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)

    window = DownloadWindow()
    window.show()

    sys.exit(app.exec_())

这样,就完成了在自定义进度条控件中显示小数点值的完整应用攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 如何在进度条中显示小数点值 - Python技术站

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

相关文章

  • PyQt5 QDateTimeEdit – 设置最大QDateTime

    PyQt5是Python编程语言的一个GUI工具包,它可以轻松创建漂亮的桌面应用程序。其中QDateTimeEdit是PyQt5中的日期和时间选择控件,可以用于让用户轻松输入日期和时间。在QDateTimeEdit控件中,有时我们需要设置日期和时间的最大值或最小值。本篇文章将详细介绍如何设置最大日期时间值。 设置QDateTimeEdit最大值 可以使用QD…

    python 2023年5月12日
    00
  • PyQt5 QCalendarWidget 获取启用的属性

    PyQt5是Python中常用的GUI库,QCalendarWidget用于显示日历供用户选择日期。获取启用的属性是指获取QCalendarWidget上被激活的属性,包括日期、时间和星期几等。下面我来详细讲解如何实现此功能。 PyQt5 QCalendarWidget获取启用的属性 1. 获取当天日期 import sys from PyQt5.QtWid…

    python 2023年5月12日
    00
  • PyQt5 QCommandLinkButton – 访问光标

    PyQt5是一种Python编程语言绑定Qt库的解决方案,提供了许多可用于Qt的GUI部件。其中的QCommandLinkButton控件是一种可用于显示描述性文本、快捷方式和一个可选的图标的按钮。 在PyQt5中,通过使用QCommandLinkButton控件的setCursor方法可以设置该控件的鼠标光标。其函数原型为: self.setCursor(…

    python 2023年5月12日
    00
  • PyQt5 – 设置复选框指标被按下时的背景图片

    当复选框被按下时需要改变复选框的背景图片,这在PyQt5中可以通过QSS来实现。 步骤一:设置应用背景样式 在使用QSS前,需要设置应用程序的背景样式。我们可以使用QMainWindow的setStyleSheet方法将应用程序的背景样式设置为指定的样式。示例代码如下: from PyQt5.QtWidgets import QApplication, QM…

    python 2023年5月11日
    00
  • PyQt5 – 如何改变复选框被按下时的背景颜色

    PyQt5是Python语言的一个GUI编程工具,可以用来创建桌面应用程序。其中,复选框是GUI编程中常用的一个UI元素。本篇攻略将带你完整了解如何用PyQt5改变复选框被按下时的背景颜色。 修改复选框被按下时的背景颜色 方法一:使用QSS(Qt风格表单) Qt风格表单是一种为Qt应用程序设计独特风格的表单,它可以通过向控件添加类似于CSS的样式来改变控件的…

    python 2023年5月10日
    00
  • PyQt5 – 设置未选中的复选框指标在悬停时的背景图片

    PyQt5是Python中的一种GUI开发工具包,主要用于开发基于QT框架的图形界面程序。本次我们将探讨如何设置未选中的复选框指标在悬停时的背景图片。 1. PyQt5设置未选中的复选框指标在悬停时的背景图片 在PyQt5中,复选框属于QCheckBox类。我们可以通过以下方式设置未选中的复选框指标在悬停时的背景图片: checkbox.setStyleSh…

    python 2023年5月11日
    00
  • PyQt5 – QDoubleSpinBox

    PyQt5是Python的GUI编程框架,QDoubleSpinBox是其中的一个控件,可以提供一个带有加减按钮的浮点数输入框。 安装PyQt5 首先需要安装PyQt5,可以使用pip命令来安装: pip install PyQt5 创建QDoubleSpinBox 使用PyQt5创建一个QDoubleSpinBox非常简单。可以通过以下代码实现: from…

    python 2023年5月13日
    00
  • PyQt5 – 设置复选框被按下时的皮肤

    针对PyQt5设置复选框被按下时的皮肤,我将为您提供完整的使用攻略。 设置复选框被按下时的皮肤 在PyQt5中,我们可以通过QCheckBox类来设置复选框,而复选框被按下时的皮肤可以通过QSS样式表来控制。 具体来说,我们可以通过以下步骤来设置复选框被按下时的皮肤: 创建复选框对象 首先,我们需要在PyQt5中创建一个QCheckBox对象。代码如下: f…

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