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
-

# 子类化该对象,重写textFromValue方法 textFromValue(self, p_int) -> format_str
- 可用信号
# 继承父类QAbstractSpinBox的信号 valueChanged(self, int) [signal] # 值发生改变时候发射该信号,传递整数类型参数值:value valueChanged(self, str) [signal] # 值发生改变时候发射该信号,传递字符串类型参数值:text # 这两个信号名称是一样的,仅仅是发射时传递的参数类型不一致(一个传的是int整数型,一个传的是String文本字符型) # 在使用的时候需要通过 valueChanged[str].connect() 的方式来指定 -
- 代码示例
- 示例: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_())


被折叠的 条评论
为什么被折叠?



