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

Skip to content

Commit 08eccfb

Browse files
authored
Merge pull request #7451 from tacaswell/fix_infinite_redraw_loop
API/FIX: mark figure as not stale on draw attempt
2 parents 51f53fb + 7a7480d commit 08eccfb

File tree

2 files changed

+26
-17
lines changed

2 files changed

+26
-17
lines changed

doc/api/api_changes.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,15 @@ where "ax" is an ``Axes3d`` object created with something like ::
155155
ax = plt.sublot(111, projection='3d')
156156

157157

158+
Stale figure behavior
159+
---------------------
160+
161+
Attempting to draw the figure will now mark it as not stale (independent if
162+
the draw succeeds). This change is to prevent repeatedly trying to re-draw a
163+
figure which is raising an error on draw. The previous behavior would only mark
164+
a figure as not stale after a full re-draw succeeded.
165+
166+
158167
Changes in 1.5.3
159168
================
160169

lib/matplotlib/figure.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,19 +1091,6 @@ def draw(self, renderer):
10911091
if not self.get_visible():
10921092
return
10931093

1094-
renderer.open_group('figure')
1095-
# prevent triggering call backs during the draw process
1096-
self._stale = True
1097-
if self.get_tight_layout() and self.axes:
1098-
try:
1099-
self.tight_layout(renderer, **self._tight_parameters)
1100-
except ValueError:
1101-
pass
1102-
# ValueError can occur when resizing a window.
1103-
1104-
if self.frameon:
1105-
self.patch.draw(renderer)
1106-
11071094
# a list of (zorder, func_to_call, list_of_args)
11081095
dsu = []
11091096

@@ -1133,11 +1120,24 @@ def draw(self, renderer):
11331120
dsu = [row for row in dsu if not row[1].get_animated()]
11341121
dsu.sort(key=itemgetter(0))
11351122

1136-
mimage._draw_list_compositing_images(
1137-
renderer, self, dsu, self.suppressComposite)
1123+
try:
1124+
renderer.open_group('figure')
1125+
if self.get_tight_layout() and self.axes:
1126+
try:
1127+
self.tight_layout(renderer, **self._tight_parameters)
1128+
except ValueError:
1129+
pass
1130+
# ValueError can occur when resizing a window.
1131+
1132+
if self.frameon:
1133+
self.patch.draw(renderer)
1134+
1135+
mimage._draw_list_compositing_images(
1136+
renderer, self, dsu, self.suppressComposite)
11381137

1139-
renderer.close_group('figure')
1140-
self.stale = False
1138+
renderer.close_group('figure')
1139+
finally:
1140+
self.stale = False
11411141

11421142
self._cachedRenderer = renderer
11431143
self.canvas.draw_event(renderer)

0 commit comments

Comments
 (0)