|
14 | 14 | import enum |
15 | 15 | import functools |
16 | 16 | import itertools |
| 17 | +import weakref |
17 | 18 | from numbers import Integral, Number |
18 | 19 |
|
19 | 20 | from cycler import cycler |
@@ -120,16 +121,6 @@ def __init__(self, ax): |
120 | 121 | self._cids = [] |
121 | 122 | self._blit_background_id = None |
122 | 123 |
|
123 | | - def __del__(self): |
124 | | - blit_background_id = getattr(self, '_blit_background_id', None) |
125 | | - # __del__ may be called on a partially initialized object, e.g., |
126 | | - # when __init__ raises. Therefore, we handle missing attributes |
127 | | - # gracefully. |
128 | | - if blit_background_id is not None: |
129 | | - canvas = getattr(self, 'canvas', None) |
130 | | - if canvas is not None: |
131 | | - canvas._release_blit_background_id(blit_background_id) |
132 | | - |
133 | 124 | canvas = property( |
134 | 125 | lambda self: getattr(self.ax.get_figure(root=True), 'canvas', None) |
135 | 126 | ) |
@@ -170,7 +161,9 @@ def _save_blit_background(self, background): |
170 | 161 | good enough for all existing widgets. |
171 | 162 | """ |
172 | 163 | if self._blit_background_id is None: |
173 | | - self._blit_background_id = self.canvas._get_blit_background_id() |
| 164 | + bbid = self.canvas._get_blit_background_id() |
| 165 | + weakref.finalize(self, self.canvas._release_blit_background_id, bbid) |
| 166 | + self._blit_background_id = bbid |
174 | 167 | self.canvas._blit_backgrounds[self._blit_background_id] = background |
175 | 168 |
|
176 | 169 | def _load_blit_background(self): |
|
0 commit comments