8000 RangeSlider handle set_val bugfix · matplotlib/matplotlib@79252d5 · GitHub
[go: up one dir, main page]

Skip to content

Commit 79252d5

Browse files
RangeSlider handle set_val bugfix
1 parent 2e921df commit 79252d5

File tree

1 file changed

+35
-5
lines changed

1 file changed

+35
-5
lines changed

lib/matplotlib/widgets.py

Lines changed: 35 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,34 @@ 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+
htop_pos = self._handles[1].get_ydata()
920+
if hbottom_pos != val[0]:
921+
hbottom_pos[0] = val[0]
922+
self._handles[0].set_ydata(hbottom_pos)
923+
if htop_pos != val[1]:
924+
htop_pos[0] = val[1]
925+
self._handles[1].set_ydata(htop_pos)
907926
else:
908927
xy[0] = val[0], .25
909928
xy[1] = val[0], .75
910929
xy[2] = val[1], .75
911930
xy[3] = val[1], .25
912931
xy[4] = val[0], .25
932+
933+
hleft_pos = self._handles[0].get_xdata()
934+
hright_pos = self._handles[1].get_xdata()
935+
if hleft_pos != val[0]:
936+
hleft_pos[0] = val[0]
937+
self._handles[0].set_xdata(hleft_pos)
938+
if hright_pos != val[1]:
939+
hright_pos[0] = val[1]
940+
self._handles[1].set_xdata(hright_pos)
941+
913942
self.poly.xy = xy
914943
self.valtext.set_text(self._format(val))
944+
915945
if self.drawon:
916946
self.ax.figure.canvas.draw_idle()
917947
self.val = val

0 commit comments

Comments
 (0)
0