ZetCode

PyQt QSpinBox

最后修改于 2023 年 8 月 24 日

在本文中,我们将展示如何使用 QSpinBox 组件。

源代码可在 PyQt-Examples 仓库中找到。访问 Advanced PyQt5 电子书,阅读 PyQt5 教程,或列出所有 PyQt 教程

QSpinBox

QSpinBox 用于处理整数和离散值集合。它允许用户通过点击向上/向下按钮或按键盘上的向上/向下键来增加/减少当前显示的值。该值也可以手动输入。

微调框的范围可以通过 setRangesetMinimumsetMaximum 函数来设置。步长值由 setSingleStep 指定。

每当微调框的值改变时,都会发出 valueChanged 信号。value 函数用于获取当前值。

PyQt QSpinBox 示例

下面是一个使用 QSpinBox 的简单示例。

spinbox.py
#!/usr/bin/python


from PyQt5.QtWidgets import (QWidget, QSpinBox, QHBoxLayout,
                             QLabel, QApplication)
import sys


class Example(QWidget):

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

        self.initUI()

    def initUI(self):

        hbox = QHBoxLayout()

        sbox = QSpinBox(self)

        sbox.valueChanged.connect(self.updateLabel)

        self.label = QLabel('0', self)

        hbox.addWidget(sbox)
        hbox.addSpacing(15)
        hbox.addWidget(self.label)

        self.setLayout(hbox)

        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle('QSpinBox')
        self.show()

    def updateLabel(self, value):

        self.label.setText(str(value))


def main():

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

QSpinBox 中选择的值会显示在旁边的 QLabel 中。

sbox.valueChanged.connect(self.updateLabel)

当用户选择一个不同的值时,会发出 valueChanged 信号。我们将 updateLabel 处理程序连接到该信号。

def updateLabel(self, value):

    self.label.setText(str(value))

updateLabel 处理程序中,我们将微调框的值设置到标签上。

QSpinBox
图:QSpinBox

QSpinBox 的范围、步长和后缀

在下面的示例中,我们探索 QSpinBox 的其他功能。

spinbox2.py
#!/usr/bin/python


from PyQt5.QtWidgets import (QWidget, QSpinBox, QHBoxLayout,
                             QLabel, QApplication)
import sys


class Example(QWidget):

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

        self.initUI()

    def initUI(self):

        hbox = QHBoxLayout()

        sbox = QSpinBox(self)
        sbox.setRange(0, 200)
        sbox.setSingleStep(5)
        sbox.setSuffix(' km')

        sbox.valueChanged.connect(self.updateLabel)

        self.label = QLabel('0', self)

        hbox.addWidget(sbox)
        hbox.addSpacing(15)
        hbox.addWidget(self.label)

        self.setLayout(hbox)

        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle('QSpinBox')
        self.show()

    def updateLabel(self, value):

        self.label.setText(str(value))


def main():

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

在该示例中,我们设置了微调框的范围、步长和后缀。

sbox = QSpinBox(self)
sbox.setRange(0, 200)
sbox.setSingleStep(5)
sbox.setSuffix(' km')

范围通过 setRange 设置,步长通过 setSingleStep 设置,后缀通过 setSuffix 设置。

QSpinBox showing suffix
图:显示后缀的 QSpinBox

QSpinBox 的值

value 函数返回 QSpinBox 的当前值。

show_value.py
#!/usr/bin/python


from PyQt5.QtWidgets import (QWidget, QSpinBox, QHBoxLayout, QMessageBox,
                             QPushButton, QApplication, QSizePolicy)
import sys


class Example(QWidget):

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

        self.initUI()

    def initUI(self):

        hbox = QHBoxLayout()

        self.sbox = QSpinBox(self)

        btn = QPushButton('Show', self)
        btn.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        btn.clicked.connect(self.showSpinboxValue)

        hbox.addWidget(self.sbox)
        hbox.addSpacing(15)
        hbox.addWidget(btn)

        self.setLayout(hbox)

        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle('QSpinBox')
        self.show()

    def showSpinboxValue(self):

        val = self.sbox.value()
        QMessageBox.information(self, 'Value', f'Value: {val}')


def main():

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

在该示例中,我们有一个微调框和一个按钮。点击按钮会显示一个消息框,其中显示了微调框的当前值。

def showSpinboxValue(self):

    val = self.sbox.value()
    QMessageBox.information(self, 'Value', f'Value: {val}')

我们使用 value 获取当前值,并将其显示在消息框中。

在本文中,我们学习了如何使用 PyQt 的 QSpinBox

作者

我的名字是 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已经创作了超过 1400 篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出所有 PyQt 教程