PyQt5 QDoubleSpinBox – 获得编辑完成的信号

PyQt5是Python下的GUI编程工具箱,其中的QDoubleSpinBox控件是用于输入浮点数的小部件。获得QDoubleSpinBox控件完成编辑的信号,其实就是获取用户输入的完成信号,可以通过信号与槽机制来实现。下面是完整的使用攻略,包含实现原理和示例说明。

QDoubleSpinBox的简介

QDoubleSpinBox控件是PyQt5中的一个小部件,用户可以通过QDoubleSpinBox输入一个浮点数。常常用于需要精确输入刻度值的应用程序和需要通过表单填写数据的应用程序。例如在3D建模软件中,需要对三维模型的长、宽、高等参数进行精确输入,此时可以用QDoubleSpinBox来实现。

QDoubleSpinBox编辑完成信号的使用

通过PyQt5可以实现QDoubleSpinBox编辑完成信号的监听,可以实现输入框的实时监听,获取用户输入的完成信号。QDoubleSpinBox编辑完成信号的实现过程如下:

from PyQt5.QtWidgets import QDoubleSpinBox
from PyQt5.QtCore import pyqtSignal

class MyDoubleSpinBox(QDoubleSpinBox):

    editingFinishedSignal = pyqtSignal()

    def __init__(self):
        super(MyDoubleSpinBox, self).__init__()
        self.valueChanged.connect(self.emitEditing)

    def emitEditing(self):
        self.editingFinishedSignal.emit()

widget = MyDoubleSpinBox()
widget.editingFinishedSignal.connect(lambda: print(f"value:{widget.text()}"))

QDoubleSpinBox继承自QAbstractSpinBox,对于QAbstractSpinBox控件而言,它会在软键盘确认、按下Enter键、离开输入框等情况触发editingFinished信号,而QDoubleSpinBox则额外支持了失去焦点、改变值上下限等多种触发情况。因此,我们需要自定义一个子类MyDoubleSpinBox,来监听并发出editingFinished信号。

在自定义的MyDoubleSpinBox控件中,首先定义了一个editingFinishedSignal信号,用来在值发生变化的时候触发。在初始化的时候,将valueChanged信号连接到emitEditing函数。emitEditing函数在接到valueChanged信号后,就会发出editingFinishedSignal信号,表示正在编辑的完成。最后,在界面中创建一个MyDoubleSpinBox对象,并将该对象的编辑完成信号与回调函数进行连接,当用户输入完成时,即可触发editingFinishedSignal信号,从而回调函数就可以获取用户输入完成的值了。

示例1:实现控件自动计算

下面通过一个简单的示例来了解QDoubleSpinBox编辑完成信号的用法。在这个实例中,我们通过自定义QDoubleSpinBox子类,实现两个QDoubleSpinBox控件的数值相加,并将结果显示在一个QLineEdit中。

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QDoubleSpinBox

class MyDoubleSpinBox(QDoubleSpinBox):

    editingFinished = pyqtSignal()

    def __init__(self):
        super(MyDoubleSpinBox, self).__init__()
        self.setObjectName("MyDoubleSpinBox")
        self.setMaximum(100)
        self.setMinimum(-100)
        self.editingFinished.connect(self.slotEditingFinished)

    def slotEditingFinished(self):
        self.editingFinished.emit()

class MainWindow(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.sb1 = MyDoubleSpinBox()
        self.sb2 = MyDoubleSpinBox()
        self.leResult = QLineEdit()

        vbox = QVBoxLayout()
        vbox.addWidget(self.sb1)
        vbox.addWidget(self.sb2)
        vbox.addWidget(self.leResult)

        self.setLayout(vbox)

        self.show()

        self.sb1.editingFinished.connect(self.calculatorResult)
        self.sb2.editingFinished.connect(self.calculatorResult)

    def calculatorResult(self):
        result = self.sb1.value() + self.sb2.value()
        self.leResult.setText(str(result))

if __name__ == '__main__':
    app = QApplication([])
    win = MainWindow()
    win.show()
    app.exec_()

这个示例中,我们通过自定义QDoubleSpinBox子类MyDoubleSpinBox,来监听编辑完成的信号。在MyDoubleSpinBox控件初始化结束后,将编辑完成的信号连接到slotEditingFinished函数中。在MainWindow窗口中,将两个MyDoubleSpinBox控件的编辑完成信号分别连接到calculatorResult函数中。

当用户编辑完成MyDoubleSpinBox中的任意一个值之后,就会触发对应的editingFinished信号。由于我们已经通过信号与槽机制将这个信号转发到了MainWindow的calculatorResult函数中,因此每当一个值被编辑完成后,就会调用calculatorResult函数,计算两个MyDoubleSpinBox控件的值的和,并将其显示在leResult控件中。

示例2:实现输入阈值检测

下面通过第二个示例,来介绍如何使用QDoubleSpinBox的编辑完成信号来实现输入阈值检测的功能。在这个示例中,我们定义了一个自定义的SpinBox,当用户输入的值小于10时,自动将其限制为10。

from PyQt5.QtGui import QDoubleValidator
from PyQt5.QtCore import Qt, pyqtSignal
from PyQt5.QtWidgets import QDoubleSpinBox

class LowerSpinBox(QDoubleSpinBox):

    def __init__(self):
        super(LowerSpinBox, self).__init__()
        self.setMaximum(100)
        self.setMinimum(0)
        self.valueChanged.connect(self.checkThreshold)
        self.setButtonSymbols(QDoubleSpinBox.NoButtons)
        self.setKeyboardTracking(False)

    def checkThreshold(self):
        if self.value() < 10:
            self.setValue(10)

在这个示例中,我们自定义了一个LowerSpinBox控件,其继承自QDoubleSpinBox。当用户编辑完成当前的内容时,会触发checkThreshold函数,这个函数会检查当前的Value是否小于阈值10。若小于阈值,则通过setValue函数将其强制设置为10。从而实现了阈值检测功能。

需要注意的是,由于QDoubleSpinBox的编辑信号有很多种触发方式,若需要仅在编辑完成的时候才进行阈值检测,需要关闭自定义SpinBox的按钮显示,即setButtonSymbols(QDoubleSpinBox.NoButtons),并且设置键盘跟踪为False,即setKeyboardTracking(False),这样只有当用户完成输入并确认后,才会触发编辑完成信号。

总之,QDoubleSpinBox控件提供了编辑完成信号,可以通过PyQt5自定义子类来监听和发射这个信号,从而完成更多的自定义功能。在实际开发中,我们可以通过这个信号实现输入的检测、限制、计算等功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 QDoubleSpinBox – 获得编辑完成的信号 - Python技术站

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

相关文章

  • PyQt5 QSpinBox – 检查字符是否为UTF-32格式

    当我们使用PyQt5中的QSpinBox控件时,需要对其文本输入进行一定的判断和限制,常见的一种需求是判断输入的字符是否为UTF-32格式。本文将详细介绍如何实现这一功能。 安装PyQt5 在开始使用PyQt5之前,需要先安装该库。可以使用pip命令进行安装: pip install pyqt5 使用QRegExpValidator对输入进行限制 QSpin…

    python 2023年5月12日
    00
  • PyQt5 – 单选按钮中的点状边框指标

    PyQt5是一款Python的界面开发工具,单选按钮是其常用的控件之一。在单选按钮中,点状边框指标是一种常见的激活选中后的效果。本篇攻略将详细讲解如何在PyQt5中实现单选按钮中的点状边框指标。 1. 设置样式表 在PyQt5中,我们可以通过设置样式表来实现单选按钮中的点状边框指标。样式表是一种类似于CSS的语言,用于描述界面控件的外观和样式。我们可以在样式…

    python 2023年5月10日
    00
  • PyQt5 – 改变选中状态下被按下的单选按钮的颜色

    使用PyQt5可以根据需要自定义单选按钮的选中状态的颜色。具体可以按照以下几个步骤进行: 引入必要的模块和库 from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * 新建单选按钮QRadioButton或其子类,如QRadioButtonWithTi…

    python 2023年5月10日
    00
  • PyQt5 QCalendarWidget – 检查网格是否可见

    下面是关于Python PyQt5 QCalendarWidget-检查网格是否可见的完整使用攻略。 1. 简介 PyQt5 QCalendarWidget是一个用于显示日历的PyQt5小部件,它具有丰富的功能和易于定制的外观。在QCalendarWidget中,可以通过检查网格是否可见来判断特定日期是否可选,并在需要时禁用某些日期。 2. 如何检查网格是否…

    python 2023年5月12日
    00
  • PyQt5 – 如何为单选按钮添加图标

    下面是详细讲解Python的“PyQt5 – 如何为单选按钮添加图标”的完整使用攻略。 1. 确定单选按钮 使用PyQt5创建单选按钮需要使用QRadioButton类。该类允许你创建一个单选按钮。该类的构造函数如下所示: QRadioButton(parent) 其中parent是父对象,可以为空。 2. 添加图标 向QRadioButton添加图标需要使…

    python 2023年5月10日
    00
  • PyQt5标签 – 添加不透明效果

    好的。要详细讲解”PyQt5标签-添加不透明效果”的完整使用攻略,需要以下步骤: 1. 安装PyQt5 在命令行或Anaconda Prompt中输入以下命令: pip install PyQt5 2. 导入必要的库 from PyQt5.QtWidgets import QApplication, QLabel from PyQt5.QtGui impor…

    python 2023年5月11日
    00
  • PyQt5 QListWidget – 获取drop indicator属性

    PyQt5是一种Python编程语言的GUI框架,其中包含了QListWidget控件,可以用来显示一系列列表数据。在使用QListWidget控件的过程中,有时需要获取dropindicator属性,以便在拖拽元素的时候进行相应的处理。下面将详细讲解如何使用PyQt5中的QListWidget控件获取dropindicator属性。 获取dropindic…

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

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

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