我们在上一章讲了步长调节器QAbstractSpinBox,这一节来讲一下它的一个子类:QSpinBox
QSpinBox是一个主要处理整数和离散值集合的步长调节器控件,它允许用户通过单击增减按钮或用键盘输入值来实现当前显示值的改变。它主要显示整数,也可以通过自定义显示一些离散的值集(周一~周日)
QSpinBox继承了QAbstractSpinBox,可以使用父类的各种API。
1.构造函数
from PyQt5.Qt import *
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.UI_SetUp()
def UI_SetUp(self):
sb = QSpinBox(self)
sb.resize(150,50)
sb.move(100,100)
self.sb = sb
if __name__ =='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
创建QSpinBox控件
创建的控件在默认情况下数值范围是从0到99
2.最大值和最小值
QSpinBox.setMinimum() #设定最大值
QSpinBox.setMaximum() #设定最小值
QSpinBox.setRange(min,max) #设定范围
QSpinBox.maximum() #获取最大值
QSpinBox.minimum() #获取最小值
3.数值循环
可以通过设置数值循环,在数据到最大值时可以直接转到最小值(反之也可以)
QSpinBox.setWrapping(True) #启用数值循环
QSpinBox.wrapping() #是否启用数值循环
4.步长设置
QSpinBox.setWrapping() #设定步长
QSpinBox.singleStep() #获取步长——>str
设定好步长每次加减的数值按设定值操作。
5.前缀和后缀和最小值特殊文本
QSpinBox.setPrefix() #设定前缀
QSpinBox.setSuffix() #设定后缀
QSpinBox.prefix() #获取前缀——>str
QSpinBox.suffix() #获取后缀——>str
加了前缀或后缀只改变数值,前后缀不变化
还可以在最小值时显示一个固定的字符,比如0元的时候定义为免费
QSpinBox.setSpecialValueText('') #设置最小值对应文本
QSpinBox.specialValueText() #获取最小值对应文本——>str
在最小值时显示设定的文本,设定后是不会显示前后缀字符串的。(这个用法是父类的)
6.进制更改
QSpinBox.setDisplayIntegerBase(int) #设置进制
QSpinBox.displayIntegerBase() #获取进制——>str
这里设置的进制是不光常用的二进制、八进制和十进制的,任何一个整数是都可以的(还可以大于16,不过实际没什么意义,0-F后可以继续)
7.数值的设置和获取
QSpinBox.setValue() #设定值
QSpinBox.value() #获取int的值
这里用的value获取的是int对应的值,不包含前后缀,最小值时不对应特殊文本
8.自定义展示格式
我们可以通过重写下面的函数来实现自定义的格式显示
class SB(QSpinBox):
def textFromValue(self, v: int):
这个函数传递了当前的整数值,
from PyQt5.Qt import *
import sys
class SB(QSpinBox):
def textFromValue(self, v: int): #自定义展示格式
week = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六',]
weekday = week[v]
return weekday
class Window(QWidget):
def __init__(self):
super().__init__()
self.UI_SetUp()
def UI_SetUp(self):
sb = SB(self) #调用的是自定义的QSpinBox控件
sb.resize(100,30)
sb.move(100,100)
sb.setRange(0,6)
self.sb = sb
if __name__ =='__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
自定义样式显示
这样就显示的是周日到周六了。
除了继承父类的
QSpinBox.editingFinished()
结束编辑信号外,它还带有另外一种信号
QSpinBox.valueChanged()
它传递有int类型的信号,还可以重构一下发送字符串类型的数据
QSpinBox.valueChanged[str]()
发送字符串时是按照当前显示的状态发送的,包含有前后缀以及自定义的显示类型。