10. 数字选择控件

一、数字选择控件

  数字选择控件提供了一对上下箭头,用户可以单击箭头选择数字,也可以直接输入。PySide6 中提供的数据选择控件主要有 QSpinBox(整数数字选择控件)和 QDoubleSpinBox(小数数字选择控件)。

  我们可以在终端中使用 pip 安装 PySide6 模块。默认是从国外的主站上下载,因此,我们可能会遇到网络不好的情况导致下载失败。我们可以在 pip 指令后通过 -i 指定国内镜像源下载

pip install pyside6 -i https://mirrors.aliyun.com/pypi/simple

  国内常用的 pip 下载源列表:

数字选择控件

  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) 方法设置,参数 symbolQAbstractSpinBox.ButtonSymbols 类型的枚举值,参数可以取值如下:

QAbstractSpinBox.ButtonSymbols.NoButtons
QAbstractSpinBox.ButtonSymbols.UpDownArrows
QAbstractSpinBox.ButtonSymbols.PlusMinus

  用 setCorrectionMode(mode:QAbstractSpinBox.CorrectionMode) 方法 设置当输入有误时使用自动修正模式,参数 modeQAbstractSpinBox.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函数确保主循环安全结束

三、浮点数数字选择控件

  QDoubleSpinBoxQSpinBox 控件类似,区别是它用来选择浮点数,并且默认保留两位小数。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函数确保主循环安全结束
posted @ 2024-12-27 19:36  星光映梦  阅读(301)  评论(0)    收藏  举报