【PyQt5-Qt Designer】QDoubleSpinBox-小数微调框

时间:2021-07-13 20:14:18

QDoubleSpinBox-小数微调框

总体说明

大部分的总体说明和QSpinBox的差不多(详见:《PyQt5:微调框1》),这里主要把有差别的地方谈一下(三点)。

  1. QDoubleSpinBox会舍去数字,以便以当前精度显示。在QDoubleSpinBox小数设置为2,调用setValue(2.555)将导致value()返回2.56。
  2. spinbox的默认精度为2位小数,但可以使用setDecimals()更改。
  3. 除了最终的前缀和后缀内容外,QDoubleSpinBox的显示值限制为18个字符。这个限制是用来保持微调时即使是非常大的值也可以使用。

更多详细的介绍请见官网:QDoubleSpinBox Class

QDoubleSpinBox小例子

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

【PyQt5-Qt Designer】QDoubleSpinBox-小数微调框

效果如下:

【PyQt5-Qt Designer】QDoubleSpinBox-小数微调框

参考:

https://zhuanlan.zhihu.com/p/31530835

完整代码:

 from PyQt5.QtWidgets import (QApplication,QWidget,QDoubleSpinBox,QLabel,QSlider,QGridLayout)
from PyQt5.QtCore import Qt
import sys class Example(QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI() def initUI(self):
self.setGeometry(300,300,300,200)
self.setWindowTitle("QDoubleSpinBox微调框")
gridLayout = QGridLayout()
self.dsb = QDoubleSpinBox()
self.dsb.setRange(0.0,10.0) self.sld = QSlider(Qt.Vertical,self)
self.sld.setRange(0,10)
self.sld.setSingleStep(1)
self.sld.setTickPosition(True) self.label = QLabel("设置精度为2",self)
gridLayout.addWidget(self.label,0,0,1,1)
gridLayout.addWidget(self.dsb,0,1,1,2)
gridLayout.addWidget(self.sld,1,1,2,1)
self.setLayout(gridLayout) self.sld.valueChanged.connect(self.dsb_Valuechange) def dsb_Valuechange(self,value):
if value >= 2 :
self.label.setText("设置精度为%s"%value)
self.dsb.setDecimals(value)
self.dsb.setSingleStep(1/(10**value)) if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())

QDoubleSpinBox微调框-案例

这个例子我们设置了精度值,最小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的精度。