Skip to content

Commit af3639b

Browse files
RangeSlider handle set_val bugfix
1 parent 2e921df commit af3639b

File tree

1 file changed

+33
-5
lines changed

1 file changed

+33
-5
lines changed

lib/matplotlib/widgets.py

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -813,7 +813,10 @@ def _update_val_from_pos(self, pos):
813813
val = self._max_in_bounds(pos)
814814
self.set_max(val)
815815
if self._active_handle:
816-
self._active_handle.set_xdata([val])
816+
if self.orientation == "vertical":
817+
self._active_handle.set_ydata([val])
818+
else:
819+
self._active_handle.set_xdata([val])
817820

818821
def _update(self, event):
819822
"""Update the slider position."""
@@ -835,12 +838,19 @@ def _update(self, event):
835838
self._active_handle = None
836839
return
837840

838-
# determine which handle was grabbed
839-
handle = self._handles[
840-
np.argmin(
841+
if self.orientation == "vertical":
842+
# determine which handle was grabbed
843+
event_handle = np.argmin(
844+
np.abs([h.get_ydata()[0] - event.ydata for h in self._handles])
845+
)
846+
handle = self._handles[event_handle]
847+
else:
848+
# determine which handle was grabbed
849+
event_handle = np.argmin(
841850
np.abs([h.get_xdata()[0] - event.xdata for h in self._handles])
842851
)
843-
]
852+
handle = self._handles[event_handle]
853+
844854
# these checks ensure smooth behavior if the handles swap which one
845855
# has a higher value. i.e. if one is dragged over and past the other.
846856
if handle is not self._active_handle:
@@ -904,14 +914,32 @@ def set_val(self, val):
904914
xy[2] = .75, val[1]
905915
xy[3] = .75, val[0]
906916
xy[4] = .25, val[0]
917+
918+
hbottom_pos = self._handles[0].get_ydata()
919+
hbottom_pos[0] = val[0]
920+
self._handles[0].set_ydata(hbottom_pos)
921+
922+
htop_pos = self._handles[1].get_ydata()
923+
htop_pos[0] = val[1]
924+
self._handles[1].set_ydata(htop_pos)
907925
else:
908926
xy[0] = val[0], .25
909927
xy[1] = val[0], .75
910928
xy[2] = val[1], .75
911929
xy[3] = val[1], .25
912930
xy[4] = val[0], .25
931+
932+
hleft_pos = self._handles[0].get_xdata()
933+
hleft_pos[0] = val[0]
934+
self._handles[0].set_xdata(hleft_pos)
935+
936+
hright_pos = self._handles[1].get_xdata()
937+
hright_pos[0] = val[1]
938+
self._handles[1].set_xdata(hright_pos)
939+
913940
self.poly.xy = xy
914941
self.valtext.set_text(self._format(val))
942+
915943
if self.drawon:
916944
self.ax.figure.canvas.draw_idle()
917945
self.val = val

0 commit comments

Comments
 (0)