Skip to content

Commit 1699c02

Browse files
committed
Move _SelectorWidget._props into SpanSelector._selection_artist
This was the only selector widget that needed to remember its properties separately from the artist, because the artist can be recreated, but we can copy from the old to new. Fixes matplotlib#25199
1 parent b51a227 commit 1699c02

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

lib/matplotlib/widgets.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2457,15 +2457,16 @@ def artists(self):
24572457

24582458
def set_props(self, **props):
24592459
"""
2460-
Set the properties of the selector artist. See the `props` argument
2461-
in the selector docstring to know which properties are supported.
2460+
Set the properties of the selector artist.
2461+
2462+
See the *props* argument in the selector docstring to know which properties are
2463+
supported.
24622464
"""
24632465
artist = self._selection_artist
24642466
props = cbook.normalize_kwargs(props, artist)
24652467
artist.set(**props)
24662468
if self.useblit:
24672469
self.update()
2468-
self._props.update(props)
24692470

24702471
def set_handle_props(self, **handle_props):
24712472
"""
@@ -2658,7 +2659,6 @@ def __init__(self, ax, onselect, direction, minspan=0, useblit=False,
26582659
# but we maintain it until it is removed
26592660
self._pressv = None
26602661

2661-
self._props = props
26622662
self.onmove_callback = onmove_callback
26632663
self.minspan = minspan
26642664

@@ -2670,7 +2670,7 @@ def __init__(self, ax, onselect, direction, minspan=0, useblit=False,
26702670

26712671
# Reset canvas so that `new_axes` connects events.
26722672
self.canvas = None
2673-
self.new_axes(ax)
2673+
self.new_axes(ax, _props=props)
26742674

26752675
# Setup handles
26762676
self._handle_props = {
@@ -2686,7 +2686,7 @@ def __init__(self, ax, onselect, direction, minspan=0, useblit=False,
26862686
# prev attribute is deprecated but we still need to maintain it
26872687
self._prev = (0, 0)
26882688

2689-
def new_axes(self, ax):
2689+
def new_axes(self, ax, *, _props=None):
26902690
"""Set SpanSelector to operate on a new Axes."""
26912691
self.ax = ax
26922692
if self.canvas is not ax.figure.canvas:
@@ -2705,10 +2705,11 @@ def new_axes(self, ax):
27052705
else:
27062706
trans = ax.get_yaxis_transform()
27072707
w, h = 1, 0
2708-
rect_artist = Rectangle((0, 0), w, h,
2709-
transform=trans,
2710-
visible=False,
2711-
**self._props)
2708+
rect_artist = Rectangle((0, 0), w, h, transform=trans, visible=False)
2709+
if _props is not None:
2710+
rect_artist.update(_props)
2711+
elif self._selection_artist is not None:
2712+
rect_artist.update_from(self._selection_artist)
27122713

27132714
self.ax.add_patch(rect_artist)
27142715
self._selection_artist = rect_artist
@@ -3287,9 +3288,9 @@ def __init__(self, ax, onselect, *, minspanx=0, minspany=0, useblit=False,
32873288
if props is None:
32883289
props = dict(facecolor='red', edgecolor='black',
32893290
alpha=0.2, fill=True)
3290-
self._props = {**props, 'animated': self.useblit}
3291-
self._visible = self._props.pop('visible', self._visible)
3292-
to_draw = self._init_shape(**self._props)
3291+
props = {**props, 'animated': self.useblit}
3292+
self._visible = props.pop('visible', self._visible)
3293+
to_draw = self._init_shape(**props)
32933294
self.ax.add_patch(to_draw)
32943295

32953296
self._selection_artist = to_draw
@@ -3305,8 +3306,7 @@ def __init__(self, ax, onselect, *, minspanx=0, minspany=0, useblit=False,
33053306

33063307
if self._interactive:
33073308
self._handle_props = {
3308-
'markeredgecolor': (self._props or {}).get(
3309-
'edgecolor', 'black'),
3309+
'markeredgecolor': (props or {}).get('edgecolor', 'black'),
33103310
**cbook.normalize_kwargs(handle_props, Line2D)}
33113311

33123312
self._corner_order = ['SW', 'SE', 'NE', 'NW']
@@ -3942,13 +3942,13 @@ def __init__(self, ax, onselect, useblit=False,
39423942

39433943
if props is None:
39443944
props = dict(color='k', linestyle='-', linewidth=2, alpha=0.5)
3945-
self._props = {**props, 'animated': self.useblit}
3946-
self._selection_artist = line = Line2D([], [], **self._props)
3945+
props = {**props, 'animated': self.useblit}
3946+
self._selection_artist = line = Line2D([], [], **props)
39473947
self.ax.add_line(line)
39483948

39493949
if handle_props is None:
39503950
handle_props = dict(markeredgecolor='k',
3951-
markerfacecolor=self._props.get('color', 'k'))
3951+
markerfacecolor=props.get('color', 'k'))
39523952
self._handle_props = handle_props
39533953
self._polygon_handles = ToolHandles(self.ax, [], [],
39543954
useblit=self.useblit,

0 commit comments

Comments
 (0)