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