Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 30b320a

Browse files
authored
Merge pull request #22167 from ericpre/deprecate_selector_visible_attribute
Deprecate selector `visible` attribute
2 parents d141366 + a2540ac commit 30b320a

File tree

3 files changed

+49
-21
lines changed

3 files changed

+49
-21
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Selector widget state internals
2+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3+
The *visible* attribute has been deprecated, use *set_visible* or
4+
*get_visible* instead.

lib/matplotlib/tests/test_widgets.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,19 @@ def onselect(epress, erelease):
104104
assert ax._erelease.ydata == y1
105105

106106

107+
def test_deprecation_selector_visible_attribute():
108+
ax = get_ax()
109+
tool = widgets.RectangleSelector(ax, lambda *args: None)
110+
111+
assert tool.get_visible()
112+
113+
with pytest.warns(
114+
MatplotlibDeprecationWarning,
115+
match="was deprecated in Matplotlib 3.6"):
116+
tool.visible = False
117+
assert not tool.get_visible()
118+
119+
107120
@pytest.mark.parametrize('drag_from_anywhere, new_center',
108121
[[True, (60, 75)],
109122
[False, (30, 20)]])
@@ -789,18 +802,18 @@ def test_selector_clear_method(ax, selector):
789802
tool = widgets.RectangleSelector(ax, onselect=noop, interactive=True)
790803
click_and_drag(tool, start=(10, 10), end=(100, 120))
791804
assert tool._selection_completed
792-
assert tool.visible
805+
assert tool.get_visible()
793806
if selector == 'span':
794807
assert tool.extents == (10, 100)
795808

796809
tool.clear()
797810
assert not tool._selection_completed
798-
assert not tool.visible
811+
assert not tool.get_visible()
799812

800813
# Do another cycle of events to make sure we can
801814
click_and_drag(tool, start=(10, 10), end=(50, 120))
802815
assert tool._selection_completed
803-
assert tool.visible
816+
assert tool.get_visible()
804817
if selector == 'span':
805818
assert tool.extents == (10, 50)
806819

lib/matplotlib/widgets.py

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1804,7 +1804,7 @@ def __init__(self, ax, onselect, useblit=False, button=None,
18041804
state_modifier_keys=None, use_data_coordinates=False):
18051805
super().__init__(ax)
18061806

1807-
self.visible = True
1807+
self._visible = True
18081808
self.onselect = onselect
18091809
self.useblit = useblit and self.canvas.supports_blit
18101810
self.connect_default_events()
@@ -2052,16 +2052,32 @@ def _on_key_release(self, event):
20522052
"""Key release event handler."""
20532053

20542054
def set_visible(self, visible):
2055-
"""Set the visibility of our artists."""
2056-
self.visible = visible
2055+
"""Set the visibility of the selector artists."""
2056+
self._visible = visible
20572057
for artist in self.artists:
20582058
artist.set_visible(visible)
20592059

2060+
def get_visible(self):
2061+
"""Get the visibility of the selector artists."""
2062+
return self._visible
2063+
2064+
@property
2065+
def visible(self):
2066+
return self.get_visible()
2067+
2068+
@visible.setter
2069+
def visible(self, visible):
2070+
_api.warn_deprecated("3.6", alternative="set_visible")
2071+
self.set_visible(visible)
2072+
20602073
def clear(self):
20612074
"""Clear the selection and set the selector ready to make a new one."""
2075+
self._clear_without_update()
2076+
self.update()
2077+
2078+
def _clear_without_update(self):
20622079
self._selection_completed = False
20632080
self.set_visible(False)
2064-
self.update()
20652081

20662082
@property
20672083
def artists(self):
@@ -2266,8 +2282,6 @@ def __init__(self, ax, onselect, direction, minspan=0, useblit=False,
22662282
props['animated'] = self.useblit
22672283

22682284
self.direction = direction
2269-
2270-
self.visible = True
22712285
self._extents_on_press = None
22722286
self.snap_values = snap_values
22732287

@@ -2405,11 +2419,11 @@ def _press(self, event):
24052419
# when the press event outside the span, we initially set the
24062420
# visibility to False and extents to (v, v)
24072421
# update will be called when setting the extents
2408-
self.visible = False
2422+
self._visible = False
24092423
self.extents = v, v
24102424
# We need to set the visibility back, so the span selector will be
24112425
# drawn when necessary (span width > 0)
2412-
self.visible = True
2426+
self._visible = True
24132427
else:
24142428
self.set_visible(True)
24152429

@@ -2598,7 +2612,7 @@ def extents(self, extents):
25982612
if self._interactive:
25992613
# Update displayed handles
26002614
self._edge_handles.set_data(self.extents)
2601-
self.set_visible(self.visible)
2615+
self.set_visible(self._visible)
26022616
self.update()
26032617

26042618

@@ -2912,7 +2926,6 @@ def __init__(self, ax, onselect, drawtype='box',
29122926
state_modifier_keys=state_modifier_keys,
29132927
use_data_coordinates=use_data_coordinates)
29142928

2915-
self.visible = True
29162929
self._interactive = interactive
29172930
self.drag_from_anywhere = drag_from_anywhere
29182931
self.ignore_event_outside = ignore_event_outside
@@ -2931,14 +2944,14 @@ def __init__(self, ax, onselect, drawtype='box',
29312944
"%(removal)s."
29322945
"Use props=dict(visible=False) instead.")
29332946
drawtype = 'line'
2934-
self.visible = False
2947+
self._visible = False
29352948

29362949
if drawtype == 'box':
29372950
if props is None:
29382951
props = dict(facecolor='red', edgecolor='black',
29392952
alpha=0.2, fill=True)
29402953
props['animated'] = self.useblit
2941-
self.visible = props.pop('visible', self.visible)
2954+
self._visible = props.pop('visible', self._visible)
29422955
self._props = props
29432956
to_draw = self._init_shape(**self._props)
29442957
self.ax.add_patch(to_draw)
@@ -3035,9 +3048,9 @@ def _press(self, event):
30353048
self._allow_creation):
30363049
x = event.xdata
30373050
y = event.ydata
3038-
self.visible = False
3051+
self._visible = False
30393052
self.extents = x, x, y, y
3040-
self.visible = True
3053+
self._visible = True
30413054
else:
30423055
self.set_visible(True)
30433056

@@ -3082,12 +3095,10 @@ def _release(self, event):
30823095
# either x or y-direction
30833096
minspanxy = (spanx <= self.minspanx or spany <= self.minspany)
30843097
if (self._drawtype != 'none' and minspanxy):
3085-
for artist in self.artists:
3086-
artist.set_visible(False)
30873098
if self._selection_completed:
30883099
# Call onselect, only when the selection is already existing
30893100
self.onselect(self._eventpress, self._eventrelease)
3090-
self._selection_completed = False
3101+
self._clear_without_update()
30913102
else:
30923103
self.onselect(self._eventpress, self._eventrelease)
30933104
self._selection_completed = True
@@ -3331,7 +3342,7 @@ def extents(self, extents):
33313342
self._corner_handles.set_data(*self.corners)
33323343
self._edge_handles.set_data(*self.edge_centers)
33333344
self._center_handle.set_data(*self.center)
3334-
self.set_visible(self.visible)
3345+
self.set_visible(self._visible)
33353346
self.update()
33363347

33373348
@property

0 commit comments

Comments
 (0)