From 82790114409a45b5ed32658b4ad8c1c93eba33de Mon Sep 17 00:00:00 2001 From: James Evans Date: Mon, 17 Aug 2015 15:16:05 -0700 Subject: [PATCH] Restored 'draw_idle' method to allow for mpl callbacks to finish processing before a Qt draw happens. --- lib/matplotlib/backends/backend_qt5.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/backends/backend_qt5.py b/lib/matplotlib/backends/backend_qt5.py index b92f545772bf..33f085f61cf7 100644 --- a/lib/matplotlib/backends/backend_qt5.py +++ b/lib/matplotlib/backends/backend_qt5.py @@ -416,7 +416,21 @@ def stop_event_loop(self): stop_event_loop.__doc__ = FigureCanvasBase.stop_event_loop_default.__doc__ def draw_idle(self): - self.update() + # This cannot be a call to 'update', we need a slightly longer + # delay, otherwise mouse releases from zooming, panning, or + # lassoing might not finish processing and will not redraw properly. + # We use the guard flag to prevent infinite calls to 'draw_idle' which + # happens with the 'stale' figure & axes callbacks. + d = self._idle + self._idle = False + + def idle_draw(*args): + try: + self.draw() + finally: + self._idle = True + if d: + QtCore.QTimer.singleShot(0, idle_draw) class MainWindow(QtWidgets.QMainWindow):