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

QDoubleSpinBox-小数微调框

总体说明

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

  1. QDoubleSpinBox会舍去数字,以便以当前精度显示。在QDoubleSpinBox小数设置为2,调用setValue(2.555)将导致value()返回2.56。
  2. spinbox的默认精度为2位小数,但可以使用setDecimals()更改。
  3. 除了最终的前缀和后缀内容外,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_())
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的精度。

posted @ 2019-01-04 15:15  XJT2019  阅读(2857)  评论(0编辑  收藏  举报