PyQt - QDoubleSpinBox 组件



PyQt 中的 QDoubleSpinBox 组件用于输入指定范围内的浮点数。它继承自 QAbstractSpinBox,后者又继承自 Qwidgets。它支持各种功能,包括键盘和鼠标交互、验证和舍入行为。

QDoubleSpinBox 的主要特性

  • 精度控制 − 开发者可以指定要显示的小数位数。这提供了对浮点数精度的控制。
  • 范围指定 − 可以设置允许的最小值和最大值,定义用户输入的理想范围。
  • 键盘和鼠标交互 − 用户可以使用键盘箭头键或鼠标滚轮与 QDoubleSpinBox 交互,以增加或减少值。
  • 信号和槽 − PyQt6 提供了一个信号 (valueChanged),可以将其连接到一个槽,以便在值更改时执行操作。
  • 本地化数字显示 − QDoubleSpinBox 使用区域设置,确保根据用户的区域设置显示小数分隔符和分组字符。

设置最大值

要设置 QDoubleSpinBox 中的最大值,可以使用 setMaximum() 方法。此方法接受单个参数 – 您希望允许用户输入的最大值。通过设置最大值,您可以限制用户输入或选择超过指定限制的值。

语法

语法如下:

your_double_spin_box.setMaximum(max_value)

这里,your_double_spin_box 应替换为您实际的 QDoubleSpinBox 对象名称,而 max_value 应为所需的最大值。

示例 1:QDoubleSpinBox 的基本实现

在下面的示例中,我们创建了 PyQt6 应用程序的基本实现,其中包含 QDoubleSpinBox 组件和 QLabel。QDoubleSpinBox 允许用户在 0100 范围内选择浮点数值,并且所选值将显示在 QLabel 中。

import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QDoubleSpinBox, QLabel, QVBoxLayout, QWidget

class MainWindow(QMainWindow):
   def __init__(self):
      super().__init__()
      self.init_ui()

   def init_ui(self):
      central_widget = QWidget(self)
      self.setCentralWidget(central_widget)

      layout = QVBoxLayout()

      self.double_spin_box = QDoubleSpinBox(self)
      self.double_spin_box.setMinimum(0)
      self.double_spin_box.setMaximum(100)  # Setting the maximum value to 100

      self.label = QLabel(self)
      self.label.setText("Selected value: ")

      layout.addWidget(self.double_spin_box)
      layout.addWidget(self.label)

      central_widget.setLayout(layout)

      self.double_spin_box.valueChanged.connect(self.update_label)

   def update_label(self, value):
      self.label.setText(f"Selected value: {value}")

if __name__ == "__main__":
   app = QApplication(sys.argv)
   window = MainWindow()
   window.show()
   sys.exit(app.exec())

输出

以上代码产生以下结果:

pyqt qdoublespinbox example 1

示例 2:自定义最大值

在下面的示例中,QDoubleSpinBox 的最大值自定义为 50,允许用户在 -5050 范围内选择值。与示例 1 类似,所选值显示在 QLabel 中。

import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QDoubleSpinBox, QLabel, QVBoxLayout, QWidget

class MainWindow(QMainWindow):
   def __init__(self):
      super().__init__()
      self.init_ui()

   def init_ui(self):
      central_widget = QWidget(self)
      self.setCentralWidget(central_widget)

      layout = QVBoxLayout()

      self.double_spin_box = QDoubleSpinBox(self)
      self.double_spin_box.setMinimum(-50)
      self.double_spin_box.setMaximum(50)  # Setting the maximum value to 50

      self.label = QLabel(self)
      self.label.setText("Selected value: ")

      layout.addWidget(self.double_spin_box)
      layout.addWidget(self.label)

      central_widget.setLayout(layout)

      self.double_spin_box.valueChanged.connect(self.update_label)

   def update_label(self, value):
      self.label.setText(f"Selected value: {value}")

if __name__ == "__main__":
   app = QApplication(sys.argv)
   window = MainWindow()
   window.show()
   sys.exit(app.exec())

输出

执行以上代码后,我们将得到以下结果:

pyqt qdoublespinbox example 2

示例 3:处理大范围

在下面的示例中,我们展示了 QDoubleSpinBox 通过将最大值设置为 1000 来处理更大范围的能力。用户可以在 01000 范围内选择值,并且所选值会在 QLabel 中实时更新。

import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QDoubleSpinBox, QLabel, QVBoxLayout, QWidget

class MainWindow(QMainWindow):
   def __init__(self):
      super().__init__()

      self.init_ui()

   def init_ui(self):
      central_widget = QWidget(self)
      self.setCentralWidget(central_widget)

      layout = QVBoxLayout()

      self.double_spin_box = QDoubleSpinBox(self)
      self.double_spin_box.setMinimum(0)
      self.double_spin_box.setMaximum(1000)  # Setting the maximum value to 1000

      self.label = QLabel(self)
      self.label.setText("Selected value: ")

      layout.addWidget(self.double_spin_box)
      layout.addWidget(self.label)

      central_widget.setLayout(layout)

      self.double_spin_box.valueChanged.connect(self.update_label)

   def update_label(self, value):
      self.label.setText(f"Selected value: {value}")

if __name__ == "__main__":
   app = QApplication(sys.argv)
   window = MainWindow()
   window.show()
   sys.exit(app.exec())

输出

执行以上代码后,我们将得到以下结果:

pyqt qdoublespinbox example 3
广告