QSpinBox类提供了一个微调框小部件。
QSpinBox被设计为处理整数和离散值集合(例如,月份名称);使用QDoubleSpinBox 可以作为浮点数的调整。
QSpinBox允许用户通过点击上/下按钮或按下键盘上的/下来选择一个值来增加/减少当前显示的值。用户也可以手动输入值。微调框支持整数值,
但可以用与 validate(),textFromValue()和valueFromText() 扩展为使用不同的字符串。
每次值改变QSpinBox发出两个valueChanged()信号,一个提供一个int,另一个提供一个QString。 QString重载提供了prefix()和suffix()两个值。当前值可以通过value()获取,并通过setValue()设置。
单击向上/向下按钮或使用键盘的向上和向下箭头将按照sizeStep()的大小逐步增加或减少当前值。如果你想改变这个行为,你可以重新实现函数stepBy()。
最小值和最大值以及步长可以使用其中一个构造函数来设置,稍后可以使用setMinimum(),setMaximum()和setSingleStep(True)来更改。
大多数微调框是定向的,但是QSpinBox也可以例外,即如果范围是0-99并且当前值是99,则如果wrapping()被设置为True,则单击“up”将给出0。如果你想循环行为,使用setWrapping()。
所显示的值可以预先加上任意字符串,例如表示货币或计量单位。
更多详细的介绍请见官网:QSpinBox Class | Qt Widgets 5.9
QSpinBox小例子
先来看看具体例子的效果吧:
效果如下:
参考:
https://zhuanlan.zhihu.com/p/31372146
完整代码:
1 from PyQt5.QtWidgets import (QApplication,QWidget,QSlider,QMessageBox,QFormLayout,QPushButton,QSpinBox) 2 from PyQt5.QtCore import Qt,QBasicTimer 3 from PyQt5.QtGui import QPixmap 4 import sys 5 6 class Example(QWidget): 7 def __init__(self): 8 super(Example, self).__init__() 9 self.initUI() 10 11 def initUI(self): 12 self.setGeometry(300,300,300,200) 13 self.setWindowTitle("QSpinBox微调框") 14 formLayout = QFormLayout() 15 self.sb1 = QSpinBox(self) 16 self.sb2 = QSpinBox(self) 17 self.sb3 = QSpinBox(self) 18 self.sld = QSlider(Qt.Horizontal,self) 19 self.sld.setRange(0,150) 20 self.sld.setSingleStep(5) 21 22 self.sb1.setRange(1,100) 23 self.sb1.setSingleStep(5) #设置步长 24 self.sb1.setMinimumSize(50,20) 25 self.sb1.setWrapping(True) #设置最大最小值循环 26 self.sb1.setValue(0) 27 28 self.sb2.setRange(0,150) 29 self.sb2.setSingleStep(5) # 设置步长 30 self.sb2.setWrapping(True) # 设置最大最小值循环 31 self.sb2.setValue(10) 32 self.sb2.setPrefix("正在下载到") #设置字首 33 self.sb2.setSuffix("%,快要下载完成了等等吧!") #设置字尾 34 35 self.sb3.setRange(0,150) 36 self.sb3.setWrapping(True) # 设置最大最小值循环 37 self.sb3.setValue(10) 38 39 formLayout.addRow("普通微调框",self.sb1) 40 formLayout.addRow("加强微调框",self.sb2) 41 formLayout.addRow("超级微调框",self.sb3) 42 formLayout.addRow("进度条控制",self.sld) 43 44 self.sb1.valueChanged.connect(self.slider1_changeValue) 45 self.sb2.valueChanged.connect(self.slider2_changeValue) 46 self.sld.valueChanged.connect(self.spinbox_changeValue) 47 self.setLayout(formLayout) 48 49 def slider1_changeValue(self,value): 50 self.sld.setValue(value) 51 52 def slider2_changeValue(self,value): 53 if value == self.sb2.maximum(): 54 QMessageBox.information(self,"信息提示框!","恭喜!下载完成",QMessageBox.Ok|QMessageBox.Close,QMessageBox.Close) 55 self.sb2.setSuffix("%,终于让你如愿以偿了!") 56 elif self.sb2.minimum() < value < self.sb2.maximum(): 57 self.sb2.setSuffix("%,千万别放弃哦。。。") 58 59 def spinbox_changeValue(self,value): 60 self.sb3.setValue(value) 61 self.sb2.setValue(value) 62 63 if __name__ == '__main__': 64 app = QApplication(sys.argv) 65 ex = Example() 66 ex.show() 67 sys.exit(app.exec_())