File tree Expand file tree Collapse file tree 3 files changed +24
-14
lines changed Expand file tree Collapse file tree 3 files changed +24
-14
lines changed Original file line number Diff line number Diff line change @@ -1652,8 +1652,10 @@ def _fix_ipython_backend2gui(cls):
1652
1652
@contextmanager
1653
1653
def _idle_draw_cntx (self ):
1654
1654
self ._is_idle_drawing = True
1655
- yield
1656
- self ._is_idle_drawing = False
1655
+ try :
1656
+ yield
1657
+ finally :
1658
+ self ._is_idle_drawing = False
1657
1659
1658
1660
def is_saving (self ):
1659
1661
"""
Original file line number Diff line number Diff line change @@ -481,16 +481,17 @@ def draw_idle(self):
481
481
QtCore .QTimer .singleShot (0 , self ._draw_idle )
482
482
483
483
def _draw_idle (self ):
484
- if not self ._draw_pending :
485
- return
486
- self ._draw_pending = False
487
- if self .height () < 0 or self .width () < 0 :
488
- return
489
- try :
490
- self .draw ()
491
- except Exception :
492
- # Uncaught exceptions are fatal for PyQt5, so catch them instead.
493
- traceback .print_exc ()
484
+ with self ._idle_draw_cntx ():
485
+ if not self ._draw_pending :
486
+ return
487
+ self ._draw_pending = False
488
+ if self .height () < 0 or self .width () < 0 :
489
+ return
490
+ try :
491
+ self .draw ()
492
+ except Exception :
493
+ # Uncaught exceptions are fatal for PyQt5, so catch them.
494
+ traceback .print_exc ()
494
495
495
496
def drawRectangle (self , rect ):
496
497
# Draw the zoom rectangle to the QPainter. _draw_rect_callback needs
Original file line number Diff line number Diff line change @@ -586,8 +586,15 @@ def _auto_draw_if_interactive(fig, val):
586
586
fig : Figure
587
587
A figure object which is assumed to be associated with a canvas
588
588
"""
589
- if val and matplotlib .is_interactive () and not fig .canvas .is_saving ():
590
- fig .canvas .draw_idle ()
589
+ if (val and matplotlib .is_interactive ()
590
+ and not fig .canvas .is_saving ()
591
+ and not fig .canvas ._is_idle_drawing ):
592
+ # Some artists can mark themselves as stale in the middle of drawing
593
+ # (e.g. axes position & tick labels being computed at draw time), but
594
+ # this shouldn't trigger a redraw because the current redraw will
595
+ # already take them into account.
596
+ with fig .canvas ._idle_draw_cntx ():
597
+ fig .canvas .draw_idle ()
591
598
592
599
593
600
def gcf ():
You can’t perform that action at this time.
0 commit comments