Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit1503ac4

Browse files
authored
Merge pull request#25573 from tacaswell/fix_removed_widget_axes
FIX: be very paranoid about checking what the current canvas is
2 parents2b75c9e +5c83d7b commit1503ac4

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

‎lib/matplotlib/tests/test_widgets.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
importoperator
44
fromunittestimportmock
55

6-
frommatplotlib.backend_basesimportMouseEvent
6+
frommatplotlib.backend_basesimportMouseEvent,DrawEvent
77
importmatplotlib.colorsasmcolors
88
importmatplotlib.widgetsaswidgets
99
importmatplotlib.pyplotasplt
@@ -1757,3 +1757,26 @@ def test_MultiCursor(horizOn, vertOn):
17571757
assertl.get_xdata()== (.5,.5)
17581758
forlinmulti.hlines:
17591759
assertl.get_ydata()== (.25,.25)
1760+
1761+
1762+
deftest_parent_axes_removal():
1763+
1764+
fig, (ax_radio,ax_checks)=plt.subplots(1,2)
1765+
1766+
radio=widgets.RadioButtons(ax_radio, ['1','2'],0)
1767+
checks=widgets.CheckButtons(ax_checks, ['1','2'], [True,False])
1768+
1769+
ax_checks.remove()
1770+
ax_radio.remove()
1771+
withio.BytesIO()asout:
1772+
# verify that saving does not raise
1773+
fig.savefig(out,format='raw')
1774+
1775+
# verify that this method which is triggered by a draw_event callback when
1776+
# blitting is enabled does not raise. Calling private methods is simpler
1777+
# than trying to force blitting to be enabled with Agg or use a GUI
1778+
# framework.
1779+
renderer=fig._get_renderer()
1780+
evt=DrawEvent('draw_event',fig.canvas,renderer)
1781+
radio._clear(evt)
1782+
checks._clear(evt)

‎lib/matplotlib/widgets.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,9 @@ def __init__(self, ax):
117117
self.ax=ax
118118
self._cids= []
119119

120-
canvas=property(lambdaself:self.ax.get_figure(root=True).canvas)
120+
canvas=property(
121+
lambdaself:getattr(self.ax.get_figure(root=True),'canvas',None)
122+
)
121123

122124
defconnect_event(self,event,callback):
123125
"""
@@ -144,6 +146,10 @@ def _get_data_coords(self, event):
144146
return ((event.xdata,event.ydata)ifevent.inaxesisself.ax
145147
elseself.ax.transData.inverted().transform((event.x,event.y)))
146148

149+
defignore(self,event):
150+
# docstring inherited
151+
returnsuper().ignore(event)orself.canvasisNone
152+
147153

148154
classButton(AxesWidget):
149155
"""
@@ -2181,7 +2187,9 @@ def connect_default_events(self):
21812187

21822188
defignore(self,event):
21832189
# docstring inherited
2184-
ifnotself.activeornotself.ax.get_visible():
2190+
ifsuper().ignore(event):
2191+
returnTrue
2192+
ifnotself.ax.get_visible():
21852193
returnTrue
21862194
# If canvas was locked
21872195
ifnotself.canvas.widgetlock.available(self):

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp