4
4
from __future__ import division , print_function
5
5
6
6
import os , sys
7
+ import ctypes
7
8
8
9
import matplotlib
9
10
from matplotlib .figure import Figure
15
16
16
17
DEBUG = False
17
18
19
+ _decref = ctypes .pythonapi .Py_DecRef
20
+ _decref .argtypes = [ctypes .py_object ]
21
+ _decref .restype = None
22
+
18
23
19
24
def new_figure_manager ( num , * args , ** kwargs ):
20
25
"""
@@ -95,6 +100,8 @@ def paintEvent( self, e ):
95
100
else :
96
101
stringBuffer = self .renderer ._renderer .tostring_argb ()
97
102
103
+ refcnt = sys .getrefcount (stringBuffer )
104
+
98
105
qImage = QtGui .QImage (stringBuffer , self .renderer .width ,
99
106
self .renderer .height ,
100
107
QtGui .QImage .Format_ARGB32 )
@@ -106,6 +113,14 @@ def paintEvent( self, e ):
106
113
p .setPen ( QtGui .QPen ( QtCore .Qt .black , 1 , QtCore .Qt .DotLine ) )
107
114
p .drawRect ( self .rect [0 ], self .rect [1 ], self .rect [2 ], self .rect [3 ] )
108
115
p .end ()
116
+
117
+ # This works around a bug in PySide 1.1.2 on Python 3.x,
118
+ # where the reference count of stringBuffer is incremented
119
+ # but never decremented by QImage.
120
+ # TODO: revert PR #1323 once the issue is fixed in PySide.
121
+ del qImage
122
+ if refcnt != sys .getrefcount (stringBuffer ):
123
+ _decref (stringBuffer )
109
124
else :
110
125
bbox = self .blitbox
111
126
l , b , r , t = bbox .extents
0 commit comments