Skip to content

Commit 4bb9274

Browse files
RangeSlider handle set_val bugfix
1 parent 2e921df commit 4bb9274

File tree

1 file changed

+39
-8
lines changed

1 file changed

+39
-8
lines changed

lib/matplotlib/widgets.py

Lines changed: 39 additions & 8 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."""
@@ -834,13 +837,21 @@ def _update(self, event):
834837
event.canvas.release_mouse(self.ax)
835838
self._active_handle = None
836839
return
837-
838-
# determine which handle was grabbed
839-
handle = self._handles[
840-
np.argmin(
841-
np.abs([h.get_xdata()[0] - event.xdata for h in self._handles])
842-
)
843-
]
840+
841+
if self.orientation == "vertical":
842+
# determine which handle was grabbed
843+
handle = self._handles[
844+
np.argmin(
845+
np.abs([h.get_ydata()[0] - event.ydata for h in self._handles])
846+
)
847+
]
848+
else:
849+
# determine which handle was grabbed
850+
handle = self._handles[
851+
np.argmin(
852+
np.abs([h.get_xdata()[0] - event.xdata for h in self._handles])
853+
)
854+
]
844855
# these checks ensure smooth behavior if the handles swap which one
845856
# has a higher value. i.e. if one is dragged over and past the other.
846857
if handle is not self._active_handle:
@@ -904,14 +915,34 @@ def set_val(self, val):
904915
xy[2] = .75, val[1]
905916
xy[3] = .75, val[0]
906917
xy[4] = .25, val[0]
918+
919+
hbottom_pos = self._handles[0].get_ydata()
920+
htop_pos = self._handles[1].get_ydata()
921+
if hbottom_pos != val[0]:
922+
hbottom_pos[0] = val[0]
923+
self._handles[0].set_ydata(hbottom_pos)
924+
if htop_pos != val[1]:
925+
htop_pos[0] = val[1]
926+
self._handles[1].set_ydata(htop_pos)
907927
else:
908928
xy[0] = val[0], .25
909929
xy[1] = val[0], .75
910930
xy[2] = val[1], .75
911931
xy[3] = val[1], .25
912932
xy[4] = val[0], .25
933+
934+
hleft_pos = self._handles[0].get_xdata()
935+
hright_pos = self._handles[1].get_xdata()
936+
if hleft_pos != val[0]:
937+
hleft_pos[0] = val[0]
938+
self._handles[0].set_xdata(hleft_pos)
939+
if hright_pos != val[1]:
940+
hright_pos[0] = val[1]
941+
self._handles[1].set_xdata(hright_pos)
942+
913943
self.poly.xy = xy
914944
self.valtext.set_text(self._format(val))
945+
915946
if self.drawon:
916947
self.ax.figure.canvas.draw_idle()
917948
self.val = val

0 commit comments

Comments
 (0)