【PyQt5-Qt Designer】QDoubleSpinBox-小数微调框
QDoubleSpinBox-小数微调框
总体说明
大部分的总体说明和QSpinBox的差不多(详见:《PyQt5:微调框1》),这里主要把有差别的地方谈一下(三点)。
- QDoubleSpinBox会舍去数字,以便以当前精度显示。在QDoubleSpinBox小数设置为2,调用setValue(2.555)将导致value()返回2.56。
- spinbox的默认精度为2位小数,但可以使用setDecimals()更改。
- 除了最终的前缀和后缀内容外,QDoubleSpinBox的显示值限制为18个字符。这个限制是用来保持微调时即使是非常大的值也可以使用。
更多详细的介绍请见官网:QDoubleSpinBox Class
QDoubleSpinBox小例子
先来看看具体例子的效果吧。
效果如下:
参考:
https://zhuanlan.zhihu.com/p/31530835
完整代码:
1 from PyQt5.QtWidgets import (QApplication,QWidget,QDoubleSpinBox,QLabel,QSlider,QGridLayout) 2 from PyQt5.QtCore import Qt 3 import sys 4 5 class Example(QWidget): 6 def __init__(self): 7 super(Example, self).__init__() 8 self.initUI() 9 10 def initUI(self): 11 self.setGeometry(300,300,300,200) 12 self.setWindowTitle("QDoubleSpinBox微调框") 13 gridLayout = QGridLayout() 14 self.dsb = QDoubleSpinBox() 15 self.dsb.setRange(0.0,10.0) 16 17 self.sld = QSlider(Qt.Vertical,self) 18 self.sld.setRange(0,10) 19 self.sld.setSingleStep(1) 20 self.sld.setTickPosition(True) 21 22 self.label = QLabel("设置精度为2",self) 23 gridLayout.addWidget(self.label,0,0,1,1) 24 gridLayout.addWidget(self.dsb,0,1,1,2) 25 gridLayout.addWidget(self.sld,1,1,2,1) 26 self.setLayout(gridLayout) 27 28 self.sld.valueChanged.connect(self.dsb_Valuechange) 29 30 def dsb_Valuechange(self,value): 31 if value >= 2 : 32 self.label.setText("设置精度为%s"%value) 33 self.dsb.setDecimals(value) 34 self.dsb.setSingleStep(1/(10**value)) 35 36 37 if __name__ == '__main__': 38 app = QApplication(sys.argv) 39 ex = Example() 40 ex.show() 41 sys.exit(app.exec_())
这个例子我们设置了精度值,最小2,最大9,通过滑块进行调节。涉及滑块的部分内容,请参考《PyQt5:小车快跑(滑块的使用)》
self.sp = QDoubleSpinBox(self) self.sp.setGeometry(10,50,100,20) self.sp.setRange(0,20) self.sp.setSingleStep(0.1)
新建一个QDoubleSpinBox对象,设置最小最大值范围(0-20),单步步长0.1。
self.sl.valueChanged.connect(self.spinbox_changevalue) def spinbox_changevalue(self,value): if value <= 7: self.lb.setText("QDoubleSpinBox精度设置为:" + str(value+2)) self.sp.setDecimals(value+2)
这个就是我们拖动滑块的时候,在标签上显示精度值大小。因为QDoubleSpinBox对象的精度是从2开始,但是滑块的值是从0开始,所以我们给滑块的值加2,并给将其设置为QDoubleSpinBox的精度。