@@ -333,6 +333,7 @@ class _valueMenu(QtWidgets.QMenu):
333333
334334 mouseMove = QtCore .Signal (object )
335335 mouseRelease = QtCore .Signal (object )
336+ stepChange = QtCore .Signal ()
336337
337338 def __init__ (self , parent = None ):
338339 super (_valueMenu , self ).__init__ (parent )
@@ -357,6 +358,8 @@ def mouseMoveEvent(self, event):
357358
358359 action = self .actionAt (event .pos ())
359360 if action :
361+ if action is not self .last_action :
362+ self .stepChange .emit ()
360363 self .last_action = action
361364 self .step = action .step
362365 elif self .last_action :
@@ -389,16 +392,17 @@ def __init__(self, parent=None):
389392 self ._data_type = float
390393 self .setText ("0" )
391394
392- self .pre_x = 0
395+ self .pre_x = None
396+ self .pre_val = None
393397 self ._step = 1
394- self ._tmp_value = 0
395398 self ._speed = 0.1
396399
397400 self .textChanged .connect (self ._on_text_changed )
398401
399402 self .menu = _valueMenu ()
400403 self .menu .mouseMove .connect (self .mouseMoveEvent )
401404 self .menu .mouseRelease .connect (self .mouseReleaseEvent )
405+ self .menu .stepChange .connect (self ._reset )
402406 steps = [0.001 , 0.01 , 0.1 , 1 , 10 , 100 , 1000 ]
403407 self .menu .set_steps (steps )
404408
@@ -407,25 +411,27 @@ def __init__(self, parent=None):
407411 def _on_text_changed (self , value ):
408412 self .valueChanged .emit (self .value ())
409413
414+ def _reset (self ):
415+ self .pre_x = None
416+
410417 def mouseMoveEvent (self , event ):
411418 if self .mid_state :
412419 if self .pre_x is None :
413420 self .pre_x = event .x ()
414- self .set_step ( self .menu . step )
415- delta = ( event . x () - self . pre_x )
416- self . _tmp_value += delta * self ._speed * self ._step
417- if abs ( self . _tmp_value ) > self ._step :
418- value = self .value () + delta * self ._step
421+ self .pre_val = self .value ( )
422+ else :
423+ self .set_step ( self .menu . step )
424+ delta = event . x () - self .pre_x
425+ value = self .pre_val + int ( delta * self . _speed ) * self ._step
419426 self .setValue (value )
420- self . _tmp_value = 0
421- self . pre_x = event . x ()
427+
428+
422429 super (_valueEdit ,self ).mouseMoveEvent (event )
423430
424431 def mousePressEvent (self , event ):
425432 if event .button () == QtCore .Qt .MiddleButton :
426433 self .mid_state = True
427- self .pre_x = None
428- self ._tmp_value = 0
434+ self ._reset ()
429435 self .menu .exec_ (QtGui .QCursor .pos ())
430436 super (_valueEdit ,self ).mousePressEvent (event )
431437
0 commit comments