047.PyQt5_QSpinBox_整型数据步长调节器

PyQt5_QSpinBox_整型数据步长调节器

  • 描述
    • 主要处理整数和离散值集(1--99、1月--12月、周一--周日)
    • 允许用户通过单击向上/向下按钮或按键盘上的上/下来选择一个值来增加/减少当前显示的值。用户还可以手动键入值
    • 旋转框支持整数值,也可以子类化此类实现更多支持
  • 继承自:QAbstractSpinBox

  • 功能作用
  • 构造函数
    QSpinBox(parent: QWidget = None)
    
  • 设置数值范围
    setMaximum(max_num)                         # 设置最大值,默认是 99
    maximum() -> int                            # 获取最大值
    setMinimum(min_num)                         # 设置最小值,默认是 0
    minnum ——> int                              # 获取最小值
    setRange(min_num, max_num)                  # 设置数值区间
    
  • 数值是否循环
    • 设置数值达到最大/小时, 跳转到最小/大
    setWrapping(bool)                           # 设置开启数值循环
    wrapping() -> bool                          # 获取是否开启数值循环
    
  • 设置步长
    • 设置步长调节器, 单步步长值
    setSingleStep(step_int)                     # 设置步长调节器但不步长值
    singleStep() -> int                         # 获取步长调节器但不步长值
    
  • 前缀和后缀
    setPrefix("周")                             # 设置前缀作为展示
    prefix() -> str                             # 获取前缀
    
    setSuffix("月")                             # 设置后缀作为展示
    suffix() -> str                             # 获取后缀
    
  • 最小值特殊文本
    • 当数据到达最小值时, 会显示此字符串
    • 当最小值显示为特殊文本的时候,前缀和后缀会丢失
    setSpecialValueText(str)                    # 设置最小值特殊文本,父类中的方法
    
  • 显示基数(进制)
    setDisplayIntegerBase(int)                  # 设置显示基数,默认是10
    displayIntegerBase() -> int                 # 获取显示基数
    
    # 以什么进制的形式进行展示
    
  • 设置和获取数值
    setValue(int)                               # 设置控件的值
    sb.lineEdit().setText(str)                  # 设置控件的值
    
    value() ——> int                             # 获取控件的值,不包含前缀和后缀
    cleanText() ——> str                         # 获取控件的值,不包含前缀和后缀
    
    text() ——> str                              # 获取控件的值,包含前缀和后缀
    sb.lineEdit().text() ——>str                 # 获取控件的值,包含前缀和后缀
    
  • 自定义显示格式
    • 展示数值之前, 调用此方法, 转换成对应的格式字符串进行显示
    • 比如:让控件内展示 10px * 10px
    • 047.PyQt5_QSpinBox_整型数据步长调节器_第1张图片

    # 子类化该对象,重写textFromValue方法
    textFromValue(self, p_int) -> format_str
    

  • 可用信号
    # 继承父类QAbstractSpinBox的信号
    
    valueChanged(self, int) [signal]            # 值发生改变时候发射该信号,传递整数类型参数值:value
    valueChanged(self, str) [signal]            # 值发生改变时候发射该信号,传递字符串类型参数值:text
    
    # 这两个信号名称是一样的,仅仅是发射时传递的参数类型不一致(一个传的是int整数型,一个传的是String文本字符型)
    # 在使用的时候需要通过 valueChanged[str].connect() 的方式来指定
    
    • 047.PyQt5_QSpinBox_整型数据步长调节器_第2张图片


  • 代码示例
  • 示例:QSpinBox功能作用
    from PyQt5.Qt import *
    import sys
    
    class MySpinBox(QSpinBox):
        def textFromValue(self, v: int) -> str:
            return str(v) + 'px * ' + str(v)  + 'px'
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('QSpinBox-创建使用')
            self.resize(500, 500)
            self.widget_list()
    
        def widget_list(self):
            self.add_widget()
    
    
        def add_widget(self):
            # sb = QSpinBox(self)
            # sb.resize(150,20)
            # sb.move(100, 100)
    
            # ****************设置最大/最小值****************** 开始
            # sb.setMaximum(180)            # 设置最大值
            # print(sb.maximum())           # 获取最大值
    
            # sb.setMinimum(10)             # 设置最小值
            # print(sb.minimum())           # 获取最小值
    
            # sb.setRange(5, 100)             # 设置取值范围
            # ****************设置最大/最小值****************** 结束
            pass
            # ****************设置数值循环****************** 开始
            # sb.setWrapping(True)        # 设置数值循环,当达到最大/最小值时,跳转到最小/最大值
            # print(sb.wrapping())        # 获取是否数值循环
            
            # ****************设置数值循环****************** 结束
            pass
            # ****************设置步长****************** 开始
            # sb.setSingleStep(2)             # 设置单步步长为2
            # 
            # print(sb.singleStep())          # 获取单步步长
            # ****************设置步长****************** 结束
            pass
            # ****************设置前缀和后缀****************** 开始
            # 设置选项为1月~12月
            # sb.setRange(1, 12)
            # sb.setSuffix('月')
    
            # 设置选项为 周日 ~ 周六
            # sb.setRange(0, 6)
            # sb.setPrefix('周')
            # 这里周日显示不了,只能显示为周0
            # 那么我们就需要用到最小值特殊文本设置方法了
            # ****************设置前缀和后缀****************** 结束
            pass
            # ****************最小值特殊文本设置****************** 开始
            # sb.setRange(0, 6)
            # sb.setPrefix('周')
            # sb.setSpecialValueText("周日")
            # 当设置了最小值特殊文本后,显示这个特殊文本的时候前缀和后缀会丢失
            # ****************最小值特殊文本设置****************** 结束
            pass
            # ****************设置显示基数(进制)****************** 开始
            # sb.setDisplayIntegerBase(2)         # 设置显示基数为二进制
    
            # print(sb.displayIntegerBase())      # 获取显示基数(进制)
            # ****************设置显示基数(进制)****************** 结束
            pass
            # ****************设置和获取值****************** 开始
            # sb.setRange(0, 6)
            # sb.setPrefix('周')
            # sb.setSpecialValueText("周日")
            # 
            # sb.setValue(3)                      # 设置控件的值
            # sb.lineEdit().setText('4')          # 设置控件的值
            # 
            # print(sb.value())                   # 获取控件的值,不包含前缀和后缀
            # print(sb.cleanText())               # 获取控件的值,不包含前缀和后缀
            # 
            # print(sb.text())                    # 获取控件的值,包含前缀和后缀
            # print(sb.lineEdit().text())         # 获取控件的值,包含前缀和后缀
    
            # ****************设置和获取值****************** 结束
            pass
            # ****************自定义显示格式****************** 开始
            # sb1 = MySpinBox(self)
            # sb1.resize(150, 20)
            # sb1.move(100, 150)
            #
            # sb.setValue(10)
            # sb1.setValue(10)
            
            # ****************自定义显示格式****************** 结束
            pass
            # ****************可用信号****************** 开始
            sb1 = MySpinBox(self)
            sb1.resize(150, 20)
            sb1.move(100, 150)
    
            sb1.setValue(10)
    
            sb1.valueChanged[int].connect(lambda val: print('int:', type(val), val))
            sb1.valueChanged[str].connect(lambda val: print('str:', type(val), val))
    
            # ****************可用信号****************** 结束
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())

你可能感兴趣的:(PyQt5,qt5,pyqt,python,qt,开发语言)