PyQt - QSpinBox 控件



QSpinBox 对象向用户呈现一个文本框,其中显示一个整数,其右侧带有向上/向下按钮。如果按下向上/向下按钮,则文本框中的值会增加/减少。

默认情况下,框中的整数从 0 开始,到 99 结束,步长为 1。对于浮点值,请使用 QDoubleSpinBox。

QSpinBox 控件中使用的方法

QSpinBox 类的重要方法列在下表中:

序号 方法及描述
1

setMinimum()

设置计数器的下限

2

setMaximum()

设置计数器的上限

3

setRange()

设置最小值、最大值和步长值

4

setValue()

以编程方式设置微调框的值

5

value()

返回当前值

6

singleStep()

设置计数器的步长值

每次按下向上/向下按钮时,QSpinBox 对象都会发出 valueChanged() 信号。关联的槽函数可以通过 value() 方法检索窗口小部件的当前值。

QSpinBox 的基本结构

在进入示例之前,让我们了解一下 QSpinBox 控件的基本结构。

在此代码片段中,我们创建一个具有 QSpinBox 控件的 PyQt 窗口。接下来,我们使用 setMinimum() 和 setMaximum() 函数定义微调框的上限。此外,我们使用 setValue() 初始化微调框的起始值。

from PyQt6.QtWidgets import QApplication, QMainWindow, QSpinBox

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

      self.setWindowTitle("Basic QSpinBox Example")
      self.setGeometry(200, 200, 300, 200)

      spinbox = QSpinBox(self)
      spinbox.move(100, 50)
      spinbox.setMinimum(0)
      spinbox.setMaximum(100)
      spinbox.setValue(50)

if __name__ == "__main__":
   app = QApplication([])
   window = MyWindow()
   window.show()
   app.exec()

输出

以上代码产生以下输出:

pyqt qspinBox basic usage

示例 1:自定义 QSpinBox

在下面的示例中,我们展示了 QSpinBox 控件的自定义选项。我们将最小值和最大值分别设置为 -100 和 100。此外,我们使用 setSingleStep() 调整递增或递减值的步长。

from PyQt6.QtWidgets import QApplication, QMainWindow, QSpinBox

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

      self.setWindowTitle("Customized QSpinBox Example")
      self.setGeometry(200, 200, 300, 200)

      spinbox = QSpinBox(self)
      spinbox.move(100, 50)
      spinbox.setMinimum(-100)
      spinbox.setMaximum(100)
      spinbox.setSingleStep(5)
      spinbox.setValue(0)

if __name__ == "__main__":
   app = QApplication([])
   window = MyWindow()
   window.show()
   app.exec()   

输出

以上代码产生以下输出:

pyqt qspinBox example 1

示例 2:QSpinBox 信号处理

在这个例子中,我们将 QSpinBox 控件的 valueChanged 信号连接到自定义槽 on_value_changed。每当微调框中的值发生变化时,此槽都会使用 QLabel 更新当前选定的值。

from PyQt6.QtWidgets import QApplication, QMainWindow, QSpinBox, QLabel

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

      self.setWindowTitle("QSpinBox Signal Handling Example")
      self.setGeometry(200, 200, 300, 200)

      spinbox = QSpinBox(self)
      spinbox.move(100, 50)
      spinbox.setMinimum(0)
      spinbox.setMaximum(100)
      spinbox.valueChanged.connect(self.on_value_changed)

      self.label = QLabel(self)
      self.label.move(100, 100)
      self.label.setText("Selected Value: 0")

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

if __name__ == "__main__":
   app = QApplication([])
   window = MyWindow()
   window.show()
   app.exec()

输出

以上代码产生以下输出:

pyqt qspinBox example 2
广告