Skip to content

Commit 94169cc

Browse files
authored
Merge pull request matplotlib#22484 from anntzer/cp
Simplify the internal API to connect picklable callbacks.
2 parents a093342 + 4caa5ba commit 94169cc

File tree

4 files changed

+21
-14
lines changed

4 files changed

+21
-14
lines changed

lib/matplotlib/axes/_base.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -658,9 +658,8 @@ def __init__(self, fig, rect,
658658
self._internal_update(kwargs)
659659

660660
for name, axis in self._axis_map.items():
661-
axis.callbacks._pickled_cids.add(
662-
axis.callbacks.connect(
663-
'units', self._unit_change_handler(name)))
661+
axis.callbacks._connect_picklable(
662+
'units', self._unit_change_handler(name))
664663

665664
rcParams = mpl.rcParams
666665
self.tick_params(

lib/matplotlib/cbook/__init__.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,16 @@ def connect(self, signal, func):
236236
self.callbacks[signal][cid] = proxy
237237
return cid
238238

239+
def _connect_picklable(self, signal, func):
240+
"""
241+
Like `.connect`, but the callback is kept when pickling/unpickling.
242+
243+
Currently internal-use only.
244+
"""
245+
cid = self.connect(signal, func)
246+
self._pickled_cids.add(cid)
247+
return cid
248+
239249
# Keep a reference to sys.is_finalizing, as sys may have been cleared out
240250
# at that point.
241251
def _remove_proxy(self, proxy, *, _is_finalizing=sys.is_finalizing):

lib/matplotlib/tests/test_cbook.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,10 +183,10 @@ def setup(self):
183183
self.callbacks = cbook.CallbackRegistry()
184184

185185
def connect(self, s, func, pickle):
186-
cid = self.callbacks.connect(s, func)
187186
if pickle:
188-
self.callbacks._pickled_cids.add(cid)
189-
return cid
187+
return self.callbacks.connect(s, func)
188+
else:
189+
return self.callbacks._connect_picklable(s, func)
190190

191191
def disconnect(self, cid):
192192
return self.callbacks.disconnect(cid)

lib/mpl_toolkits/mplot3d/axes3d.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -157,14 +157,12 @@ def __init__(
157157
self.fmt_zdata = None
158158

159159
self.mouse_init()
160-
self.figure.canvas.callbacks._pickled_cids.update({
161-
self.figure.canvas.mpl_connect(
162-
'motion_notify_event', self._on_move),
163-
self.figure.canvas.mpl_connect(
164-
'button_press_event', self._button_press),
165-
self.figure.canvas.mpl_connect(
166-
'button_release_event', self._button_release),
167-
})
160+
self.figure.canvas.callbacks._connect_picklable(
161+
'motion_notify_event', self._on_move)
162+
self.figure.canvas.callbacks._connect_picklable(
163+
'button_press_event', self._button_press)
164+
self.figure.canvas.callbacks._connect_picklable(
165+
'button_release_event', self._button_release)
168166
self.set_top_view()
169167

170168
self.patch.set_linewidth(0)

0 commit comments

Comments
 (0)