10. 数字选择控件
一、数字选择控件
数字选择控件提供了一对上下箭头,用户可以单击箭头选择数字,也可以直接输入。PySide6 中提供的数据选择控件主要有 QSpinBox(整数数字选择控件)和 QDoubleSpinBox(小数数字选择控件)。
我们可以在终端中使用 pip 安装 PySide6 模块。默认是从国外的主站上下载,因此,我们可能会遇到网络不好的情况导致下载失败。我们可以在 pip 指令后通过 -i 指定国内镜像源下载。
pip install pyside6 -i https://mirrors.aliyun.com/pypi/simple
国内常用的 pip 下载源列表:
- 阿里云 https://mirrors.aliyun.com/pypi/simple
- 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple
- 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple

QAbstractSpinBox 类的常用方法如下:
# 实例方法
text() -> str # 获取值
clear() -> None # 清除值
setAlignment(flag:Qt.Alignment) -> None # 设置对齐方式
setButtonSymbols(bs:Qt.ButtonSymbols) -> None # 设置右侧的按钮样式
setCorrectionMode(cm:Qt.CorrectionMode) -> None # 设置自动修正模式
setKeyboardTracking(kt:bool) -> None # 设置键盘跟踪
setFrame(enable:bool) -> None # 设置是否有外边框
setGroupSeparatorShown(enable:bool) -> None # 设置分组分隔符(3位)是否显示
setReadOnly(enable:bool) -> None # 设置是否只读
setSpecialValueText(txt:str) -> None # 设置特殊值文本,当显示的值等于允许的最小值,显示该文本
setWrapping(enable:bool) -> None # 设置是否可以循环,即最大值后再增大则变成最小值,最小值后再减小则变成最大值
setAccelerated(enablw:bool) -> None # 当按住增大或减小按钮时,是否加速显示值
# 槽函数
selectAll() -> None # 选择显示的值,不包含前缀和后缀
stepDown() -> None # 增大值
stepUp() -> None # 减少值
QAbstractSpinBox 类常用信号及其说明如下:
editingFinished() # 编辑完成后发射信号
按钮的样式可以用 setButtonSymbols(symbol:QAbstractSpinBox.ButtonSymbols) 方法设置,参数 symbol 是 QAbstractSpinBox.ButtonSymbols 类型的枚举值,参数可以取值如下:
QAbstractSpinBox.ButtonSymbols.NoButtons
QAbstractSpinBox.ButtonSymbols.UpDownArrows
QAbstractSpinBox.ButtonSymbols.PlusMinus
用 setCorrectionMode(mode:QAbstractSpinBox.CorrectionMode) 方法 设置当输入有误时使用自动修正模式,参数 mode 是 QAbstractSpinBox.CorrectionMode 类型的枚举值,可取值如下:
QAbstractSpinBox.CorrectionMode.CorrectToPreviousValue # 修正成最近正确的值
QAbstractSpinBox.CorrectionMode.CorrectToNearestValue # 修正成最接近正确的值
二、整数数字选择控件
QSpinBox 是一个整数数字选择控件,该控件提供了一对上下箭头,用户可以单击箭头选择数字,也可以直接输入。如果输入的数值大于设置的最大值,或小于设置的最小值,QSpinBox 将不会接受输入。
用 QSpinBox 类创建实例对象的方法如下:
QSpinBox(parent:QWidget=None)
其中 parent 是 窗口 或者 容器类控件。
QSpinBox 类的常用方法如下:
# 实例方法
value() -> int # 获取当前值
cleanText() -> None # 清除文本
setDisplayIntegerBase(base:int) -> None # 设置显示的进制
displayIntegerBase() -> int # 获取显示的进制
setMinimum(min:int) -> None # 设置最小值
setMaximum(max:int) -> None # 设置最大值
setRange(min:int, max:int) -> None # 设置范围
minimum() -> int # 获取最小值
maximum() -> int # 获取最大值
setSingleStep(value:int) -> None # 设置步长
singleStep() -> int # 获取步长
setPrefix(prefix:str) -> None # 设置前缀
setSuffix(suffix:str) -> None # 设置后缀
# 槽函数
setValue(value:int) -> None # 设置当前值
QSpinBox 类常用的信号及其说明如下:
textChanged(text:str) # 文本改变时发射信号
valueChanged(i:int) # 值改变时发射信号
默认情况下,
QSpinBox控件的取值范围为 0 ~ 99,步长值为 1。
我们新建一个 ui.py 文件,用来存放 UI 相关的代码。
from PySide6.QtWidgets import QWidget
from PySide6.QtWidgets import QLabel, QSpinBox
from PySide6.QtWidgets import QFormLayout
class MyUi:
def setupUi(self, window:QWidget):
window.resize(160, 60) # 1.设置窗口对象大小
self.label = QLabel(window) # 2.创建标签控件对象
self.spinBox = QSpinBox(window) # 3.创建整数数字选择控件对象
layout = QFormLayout(window) # 4.创建表单布局对象
layout.addRow(self.label, self.spinBox) # 5.添加控件到布局中
self.spinBox.setGroupSeparatorShown(True) # 6.设置值按照千位用逗号隔开
self.spinBox.setWrapping(True) # 7.设置是否可以循环,即最大值后再增大则变成最小值,最小值后再减小则变成最大值
self.spinBox.setAccelerated(True) # 8.设置按住按钮时可以加速
self.spinBox.setRange(10000, 20000) # 9.设置整数数字选择控件的取值范围
self.spinBox.setSingleStep(100) # 10.设置整数数字选择控件的步长
self.spinBox.setValue(15000) # 11.设置整数数字选择控件的当前值
self.label.setText(str(self.spinBox.value())) # 12.获取整数数字选择控件的当前值,然后设置标签的文本
我们新建一个 widget.py 文件,用来存放业务逻辑相关的代码。
import sys
from PySide6.QtWidgets import QApplication, QWidget
from ui import MyUi
class MyWidget(QWidget):
def __init__(self):
super().__init__() # 1.调用父类Qwidget类的__init__()方法
self.__ui = MyUi()
self.__ui.setupUi(self) # 2.初始化页面
self.__ui.spinBox.valueChanged.connect(self.spinBox_value_changed) # 3.关联数字选择控件值改变时触发信号
def spinBox_value_changed(self, value:int):
self.__ui.label.setText(str(value))
if __name__ == "__main__":
app = QApplication(sys.argv) # 1.创建一个QApplication类的实例
window = MyWidget() # 2.创建一个窗口
window.show() # 3.显示窗口
sys.exit(app.exec()) # 4.进入程序的主循环,并通过exit函数确保主循环安全结束
三、浮点数数字选择控件
QDoubleSpinBox 与 QSpinBox 控件类似,区别是它用来选择浮点数,并且默认保留两位小数。QDoubleSpinBox 控件的使用方法与 QSpinBox 控件类似,但由于它处理的是小数数字,因此该控件提供了一个 setDecimals(prec:int) 方法,用来 设置小数的位数。
我们修改 ui.py 文件的内容。
from PySide6.QtWidgets import QWidget
from PySide6.QtWidgets import QLabel, QDoubleSpinBox
from PySide6.QtWidgets import QFormLayout
class MyUi:
def setupUi(self, window:QWidget):
window.resize(160, 60) # 1.设置窗口对象大小
self.label = QLabel(window) # 2.创建标签控件对象
self.doubleSpinBox = QDoubleSpinBox(window) # 3.创建浮点数数字选择控件对象
layout = QFormLayout(window) # 4.创建表单布局对象
layout.addRow(self.label, self.doubleSpinBox) # 5.添加控件到布局中
self.doubleSpinBox.setGroupSeparatorShown(True) # 6.设置值按照千位用逗号隔开
self.doubleSpinBox.setWrapping(True) # 7.设置是否可以循环,即最大值后再增大则变成最小值,最小值后再减小则变成最大值
self.doubleSpinBox.setAccelerated(True) # 8.设置按住按钮时可以加速
self.doubleSpinBox.setRange(0, 10) # 9.设置浮点数数字选择控件的取值范围
self.doubleSpinBox.setDecimals(2) # 11.设置浮点数数字选择控件的小数位数
self.doubleSpinBox.setSingleStep(0.01) # 12.设置浮点数数字选择控件的步长
self.doubleSpinBox.setValue(6.66) # 13.设置浮点数数字选择控件的当前值
self.label.setText(str(self.doubleSpinBox.value())) # 14.获取浮点数数字选择控件的当前值,然后设置标签的文本
我们修改 widget.py 文件的内容。
import sys
from PySide6.QtWidgets import QApplication, QWidget
from ui import MyUi
class MyWidget(QWidget):
def __init__(self):
super().__init__() # 1.调用父类Qwidget类的__init__()方法
self.__ui = MyUi()
self.__ui.setupUi(self) # 2.初始化页面
self.__ui.doubleSpinBox.textChanged.connect(self.spinBox_text_changed) # 3.关联浮点数数字选择控件文本改变时触发信号
def spinBox_text_changed(self, value:int):
self.__ui.label.setText(str(value))
if __name__ == "__main__":
app = QApplication(sys.argv) # 1.创建一个QApplication类的实例
window = MyWidget() # 2.创建一个窗口
window.show() # 3.显示窗口
sys.exit(app.exec()) # 4.进入程序的主循环,并通过exit函数确保主循环安全结束

浙公网安备 33010602011771号