PyQt5 QDoubleSpinBox – 获取数值变化的信号

  • Post category:Python

PyQt5是Python中使用广泛的GUI开发工具包,可以用于快速构建跨平台的图形界面程序。在PyQt5中,QDoubleSpinBox是一个用于输入浮点数的控件,该控件提供了获取数值变化的信号的方法,非常方便开发人员实现一些交互式操作。

实现获取QDoubleSpinBox数值变化的信号,需要通过connect()方法对相应的信号进行连接。在QDoubleSpinBox中,有两个主要的信号可供连接,分别是valueChanged()和valueChangedDouble()。其中valueChanged()信号在数值发生变化时会发送一个QIntArgument类型的参数,表示当前的数值;而valueChangedDouble()信号同样在数值发生变化时发送一个float类型的参数,也表示当前的数值。

以下是一个示例代码,演示了如何使用valueChanged()信号捕捉QDoubleSpinBox数值变化的事件并输出当前值:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QDoubleSpinBox

class DoubleSpinBoxApp(QMainWindow):

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

        self.initUI()

    def initUI(self):
        self.setWindowTitle("QDoubleSpinBox Demo")

        # 创建QDoubleSpinBox控件
        self.spinbox = QDoubleSpinBox(self)
        self.spinbox.setGeometry(50, 50, 150, 30)
        self.spinbox.setRange(-100.0, 100.0)
        self.spinbox.setDecimals(2)
        self.spinbox.setSingleStep(0.1)
        self.spinbox.setValue(0.0)

        # 通过connect()方法连接valueChanged()信号,捕捉数值变化事件
        self.spinbox.valueChanged.connect(self.onValueChanged)

        self.setGeometry(300, 300, 250, 150)
        self.show()

    # valueChanged()信号的回调函数
    def onValueChanged(self, val):
        print("Current value: {0:.2f}".format(val))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DoubleSpinBoxApp()
    sys.exit(app.exec_())

该示例代码创建了一个QDoubleSpinBox控件,设置了数值范围、小数位数、单次步长和初始值,并且通过connect()方法将其valueChanged()信号连接到了一个回调函数onValueChanged()上面。当QDoubleSpinBox控件的数值发生变化时,回调函数会接收到数值变化事件,并输出当前的数值。

除了通过valueChanged()信号,我们还可以使用valueChangedDouble()信号来捕捉QDoubleSpinBox控件的数值变化事件。以下是一个示例代码,演示了如何使用valueChangedDouble()信号获取QDoubleSpinBox数值变化的事件并动态计算当前值的平方:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QDoubleSpinBox, QLabel

class DoubleSpinBoxApp(QMainWindow):

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

        self.initUI()

    def initUI(self):
        self.setWindowTitle("QDoubleSpinBox Demo")

        # 创建QDoubleSpinBox控件
        self.spinbox = QDoubleSpinBox(self)
        self.spinbox.setGeometry(50, 50, 150, 30)
        self.spinbox.setRange(-100.0, 100.0)
        self.spinbox.setDecimals(2)
        self.spinbox.setSingleStep(0.1)
        self.spinbox.setValue(0.0)

        # 通过connect()方法连接valueChangedDouble()信号,捕捉数值变化事件
        self.spinbox.valueChangedDouble.connect(self.onValueChanged)

        # 创建显示结果的标签控件
        self.label = QLabel(self)
        self.label.setGeometry(50, 100, 150, 30)

        self.setGeometry(300, 300, 250, 150)
        self.show()

    # valueChangedDouble()信号的回调函数
    def onValueChanged(self, val):
        result = val ** 2.0
        self.label.setText("Result: {0:.2f}".format(result))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DoubleSpinBoxApp()
    sys.exit(app.exec_())

该示例代码创建了一个QDoubleSpinBox控件和一个用于显示结果的QLabel控件。通过connect()方法将QDoubleSpinBox的valueChangedDouble()信号连接到一个回调函数onValueChanged()上面,该回调函数根据当前数值计算出平方并显示结果在QLabel控件上面。

综上,我们可以通过connect()方法将QDoubleSpinBox的valueChanged()或valueChangedDouble()信号连接到自定义的回调函数上,以便实现一些交互式操作。