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

Appearance settings

Commit c947017

Browse filesBrowse files
committed
MNT: be more careful in Qt backend that there is actually a Figure
in mpl_gui we are being more proactive about breaking circular references when closing a GUI window so that it is possible for a FigureCanvasQt to be in a state where the figure attribute is None. In that case short-circuit return in the UI events.
1 parent 518b268 commit c947017
Copy full SHA for c947017

File tree

1 file changed

+14
-6
lines changed
Filter options

1 file changed

+14
-6
lines changed

‎lib/matplotlib/backends/backend_qt.py

Copy file name to clipboardExpand all lines: lib/matplotlib/backends/backend_qt.py
+14-6Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -261,43 +261,49 @@ def enterEvent(self, event):
261261
# Force querying of the modifiers, as the cached modifier state can
262262
# have been invalidated while the window was out of focus.
263263
mods = QtWidgets.QApplication.instance().queryKeyboardModifiers()
264+
if self.figure is None:
265+
return
264266
LocationEvent("figure_enter_event", self,
265267
*self.mouseEventCoords(event),
266268
modifiers=self._mpl_modifiers(mods),
267269
guiEvent=event)._process()
268270

269271
def leaveEvent(self, event):
270272
QtWidgets.QApplication.restoreOverrideCursor()
273+
if self.figure is None:
274+
return
271275
LocationEvent("figure_leave_event", self,
272276
*self.mouseEventCoords(),
273277
modifiers=self._mpl_modifiers(),
274278
guiEvent=event)._process()
275279

276280
def mousePressEvent(self, event):
277281
button = self.buttond.get(event.button())
278-
if button is not None:
282+
if button is not None and self.figure is not None:
279283
MouseEvent("button_press_event", self,
280284
*self.mouseEventCoords(event), button,
281285
modifiers=self._mpl_modifiers(),
282286
guiEvent=event)._process()
283287

284288
def mouseDoubleClickEvent(self, event):
285289
button = self.buttond.get(event.button())
286-
if button is not None:
290+
if button is not None and self.figure is not None:
287291
MouseEvent("button_press_event", self,
288292
*self.mouseEventCoords(event), button, dblclick=True,
289293
modifiers=self._mpl_modifiers(),
290294
guiEvent=event)._process()
291295

292296
def mouseMoveEvent(self, event):
297+
if self.figure is None:
298+
return
293299
MouseEvent("motion_notify_event", self,
294300
*self.mouseEventCoords(event),
295301
modifiers=self._mpl_modifiers(),
296302
guiEvent=event)._process()
297303

298304
def mouseReleaseEvent(self, event):
299305
button = self.buttond.get(event.button())
300-
if button is not None:
306+
if button is not None and self.figure is not None:
301307
MouseEvent("button_release_event", self,
302308
*self.mouseEventCoords(event), button,
303309
modifiers=self._mpl_modifiers(),
@@ -311,29 +317,31 @@ def wheelEvent(self, event):
311317
steps = event.angleDelta().y() / 120
312318
else:
313319
steps = event.pixelDelta().y()
314-
if steps:
320+
if steps and self.figure is not None:
315321
MouseEvent("scroll_event", self,
316322
*self.mouseEventCoords(event), step=steps,
317323
modifiers=self._mpl_modifiers(),
318324
guiEvent=event)._process()
319325

320326
def keyPressEvent(self, event):
321327
key = self._get_key(event)
322-
if key is not None:
328+
if key is not None and self.figure is not None:
323329
KeyEvent("key_press_event", self,
324330
key, *self.mouseEventCoords(),
325331
guiEvent=event)._process()
326332

327333
def keyReleaseEvent(self, event):
328334
key = self._get_key(event)
329-
if key is not None:
335+
if key is not None and self.figure is not None:
330336
KeyEvent("key_release_event", self,
331337
key, *self.mouseEventCoords(),
332338
guiEvent=event)._process()
333339

334340
def resizeEvent(self, event):
335341
if self._in_resize_event: # Prevent PyQt6 recursion
336342
return
343+
if self.figure is None:
344+
return
337345
self._in_resize_event = True
338346
try:
339347
w = event.size().width() * self.device_pixel_ratio

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.