@@ -16,6 +16,7 @@ def __init__(self, parent=None):
1616 self ._slider = QtWidgets .QSlider ()
1717 self ._spinbox = QtWidgets .QSpinBox ()
1818 self ._init ()
19+ self ._init_signal_connections ()
1920
2021 def _init (self ):
2122 self ._slider .setOrientation (QtCore .Qt .Horizontal )
@@ -27,13 +28,15 @@ def _init(self):
2728 layout .setContentsMargins (0 , 0 , 0 , 0 )
2829 layout .addWidget (self ._spinbox )
2930 layout .addWidget (self ._slider )
30- self ._spinbox .valueChanged .connect (self ._on_spnbox_changed )
31- self ._slider .valueChanged .connect (self ._on_slider_changed )
3231 # store the original press event.
3332 self ._slider_mouse_press_event = self ._slider .mousePressEvent
3433 self ._slider .mousePressEvent = self ._on_slider_mouse_press
3534 self ._slider .mouseReleaseEvent = self ._on_slider_mouse_release
3635
36+ def _init_signal_connections (self ):
37+ self ._spinbox .valueChanged .connect (self ._on_spnbox_changed )
38+ self ._slider .valueChanged .connect (self ._on_slider_changed )
39+
3740 def _on_slider_mouse_press (self , event ):
3841 self ._block = True
3942 self ._slider_mouse_press_event (event )
@@ -68,3 +71,51 @@ def set_min(self, value=0):
6871 def set_max (self , value = 0 ):
6972 self ._spinbox .setMaximum (value )
7073 self ._slider .setMaximum (value )
74+
75+
76+ class QDoubleSlider (QtWidgets .QSlider ):
77+ double_value_changed = QtCore .Signal (float )
78+
79+ def __init__ (self , decimals = 2 , * args , ** kargs ):
80+ super (QDoubleSlider , self ).__init__ (* args , ** kargs )
81+ self ._multiplier = 10 ** decimals
82+
83+ self .valueChanged .connect (self ._on_value_change )
84+
85+ def _on_value_change (self ):
86+ value = float (super (QDoubleSlider , self ).value ()) / self ._multiplier
87+ self .double_value_changed .emit (value )
88+
89+ def value (self ):
90+ return float (super (QDoubleSlider , self ).value ()) / self ._multiplier
91+
92+ def setMinimum (self , value ):
93+ return super (QDoubleSlider , self ).setMinimum (value * self ._multiplier )
94+
95+ def setMaximum (self , value ):
96+ return super (QDoubleSlider , self ).setMaximum (value * self ._multiplier )
97+
98+ def setSingleStep (self , value ):
99+ return super (QDoubleSlider , self ).setSingleStep (value * self ._multiplier )
100+
101+ def singleStep (self ):
102+ return float (super (QDoubleSlider , self ).singleStep ()) / self ._multiplier
103+
104+ def setValue (self , value ):
105+ super (QDoubleSlider , self ).setValue (int (value * self ._multiplier ))
106+
107+
108+ class PropDoubleSlider (PropSlider ):
109+ def __init__ (self , parent = None , decimals = 2 ):
110+ # Do not initialize Propslider, just its parents
111+ super (PropSlider , self ).__init__ (parent )
112+ self ._block = False
113+ self ._slider = QDoubleSlider (decimals = decimals )
114+ self ._spinbox = QtWidgets .QDoubleSpinBox ()
115+ self ._init ()
116+ self ._init_signal_connections ()
117+
118+ def _init_signal_connections (self ):
119+ self ._spinbox .valueChanged .connect (self ._on_spnbox_changed )
120+ # Connect to double_value_changed instead valueChanged
121+ self ._slider .double_value_changed .connect (self ._on_slider_changed )
0 commit comments