@@ -38,45 +38,45 @@ def paintEvent(self, event):
3838 return
3939
4040 painter = QtGui .QPainter (self )
41-
42- # See documentation of QRect: bottom() and right() are off by 1, so use
43- # left() + width() and top() + height().
44- rect = event .rect ()
45- # scale rect dimensions using the screen dpi ratio to get
46- # correct values for the Figure coordinates (rather than QT5's coords)
47- width = rect .width () * self ._dpi_ratio
48- height = rect .height () * self ._dpi_ratio
49- left , top = self .mouseEventCoords (rect .topLeft ())
50- # shift the "top" by the height of the image to get the
51- # correct corner for our coordinate system
52- bottom = top - height
53- # same with the right side of the image
54- right = left + width
55- # create a buffer using the image bounding box
56- bbox = Bbox ([[left , bottom ], [right , top ]])
57- reg = self .copy_from_bbox (bbox )
58- buf = cbook ._unmultiplied_rgba8888_to_premultiplied_argb32 (
59- memoryview (reg ))
60-
61- # clear the widget canvas
62- painter .eraseRect (rect )
63-
64- qimage = QtGui .QImage (buf , buf .shape [1 ], buf .shape [0 ],
65- QtGui .QImage .Format_ARGB32_Premultiplied )
66- if hasattr (qimage , 'setDevicePixelRatio' ):
67- # Not available on Qt4 or some older Qt5.
68- qimage .setDevicePixelRatio (self ._dpi_ratio )
69- # set origin using original QT coordinates
70- origin = QtCore .QPoint (rect .left (), rect .top ())
71- painter .drawImage (origin , qimage )
72- # Adjust the buf reference count to work around a memory
73- # leak bug in QImage under PySide on Python 3.
74- if QT_API in ('PySide' , 'PySide2' ):
75- ctypes .c_long .from_address (id (buf )).value = 1
76-
77- self ._draw_rect_callback (painter )
78-
79- painter .end ()
41+ try :
42+ # See documentation of QRect: bottom() and right() are off by 1, so use
43+ # left() + width() and top() + height().
44+ rect = event .rect ()
45+ # scale rect dimensions using the screen dpi ratio to get
46+ # correct values for the Figure coordinates (rather than QT5's coords)
47+ width = rect .width () * self ._dpi_ratio
48+ height = rect .height () * self ._dpi_ratio
49+ left , top = self .mouseEventCoords (rect .topLeft ())
50+ # shift the "top" by the height of the image to get the
51+ # correct corner for our coordinate system
52+ bottom = top - height
53+ # same with the right side of the image
54+ right = left + width
55+ # create a buffer using the image bounding box
56+ bbox = Bbox ([[left , bottom ], [right , top ]])
57+ reg = self .copy_from_bbox (bbox )
58+ buf = cbook ._unmultiplied_rgba8888_to_premultiplied_argb32 (
59+ memoryview (reg ))
60+
61+ # clear the widget canvas
62+ painter .eraseRect (rect )
63+
64+ qimage = QtGui .QImage (buf , buf .shape [1 ], buf .shape [0 ],
65+ QtGui .QImage .Format_ARGB32_Premultiplied )
66+ if hasattr (qimage , 'setDevicePixelRatio' ):
67+ # Not available on Qt4 or some older Qt5.
68+ qimage .setDevicePixelRatio (self ._dpi_ratio )
69+ # set origin using original QT coordinates
70+ origin = QtCore .QPoint (rect .left (), rect .top ())
71+ painter .drawImage (origin , qimage )
72+ # Adjust the buf reference count to work around a memory
73+ # leak bug in QImage under PySide on Python 3.
74+ if QT_API in ('PySide' , 'PySide2' ):
75+ ctypes .c_long .from_address (id (buf )).value = 1
76+
77+ self ._draw_rect_callback (painter )
78+ finally :
79+ painter .end ()
8080
8181 def print_figure (self , * args , ** kwargs ):
8282 super ().print_figure (* args , ** kwargs )
0 commit comments