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小例子

先来看看具体例子的效果吧:

【PyQt5-Qt Designer】QSpinBox-微调框

效果如下:

 【PyQt5-Qt Designer】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_())
QSpinBox+QSlider 案例

相关文章:

  • 2021-09-16
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-08
  • 2021-08-05
  • 2021-06-04
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案