63
63
64
64
65
65
def _setup_pyqt5 ():
66
- global QtCore , QtGui , QtWidgets , __version__ , is_pyqt5 , _getSaveFileName
66
+ global QtCore , QtGui , QtWidgets , __version__ , is_pyqt5 , \
67
+ _isdeleted , _getSaveFileName
67
68
68
69
if QT_API == QT_API_PYQT5 :
69
70
from PyQt5 import QtCore , QtGui , QtWidgets
71
+ import sip
70
72
__version__ = QtCore .PYQT_VERSION_STR
71
73
QtCore .Signal = QtCore .pyqtSignal
72
74
QtCore .Slot = QtCore .pyqtSlot
73
75
QtCore .Property = QtCore .pyqtProperty
76
+ _isdeleted = sip .isdeleted
74
77
elif QT_API == QT_API_PYSIDE2 :
75
78
from PySide2 import QtCore , QtGui , QtWidgets , __version__
79
+ import shiboken2
80
+ def _isdeleted (obj ): return not shiboken2 .isValid (obj )
76
81
else :
77
82
raise ValueError ("Unexpected value for the 'backend.qt5' rcparam" )
78
83
_getSaveFileName = QtWidgets .QFileDialog .getSaveFileName
@@ -82,7 +87,8 @@ def is_pyqt5():
82
87
83
88
84
89
def _setup_pyqt4 ():
85
- global QtCore , QtGui , QtWidgets , __version__ , is_pyqt5 , _getSaveFileName
90
+ global QtCore , QtGui , QtWidgets , __version__ , is_pyqt5 , \
91
+ _isdeleted , _getSaveFileName
86
92
87
93
def _setup_pyqt4_internal (api ):
88
94
global QtCore , QtGui , QtWidgets , \
@@ -102,6 +108,7 @@ def _setup_pyqt4_internal(api):
102
108
except ValueError :
103
109
pass
104
110
from PyQt4 import QtCore , QtGui
111
+ import sip # Always succeeds *after* importing PyQt4.
105
112
__version__ = QtCore .PYQT_VERSION_STR
106
113
# PyQt 4.6 introduced getSaveFileNameAndFilter:
107
114
# https://riverbankcomputing.com/news/pyqt-46
@@ -110,16 +117,19 @@ def _setup_pyqt4_internal(api):
110
117
QtCore .Signal = QtCore .pyqtSignal
111
118
QtCore .Slot = QtCore .pyqtSlot
112
119
QtCore .Property = QtCore .pyqtProperty
120
+ _isdeleted = sip .isdeleted
113
121
_getSaveFileName = QtGui .QFileDialog .getSaveFileNameAndFilter
114
122
115
123
if QT_API == QT_API_PYQTv2 :
116
124
_setup_pyqt4_internal (api = 2 )
117
125
elif QT_API == QT_API_PYSIDE :
118
126
from PySide import QtCore , QtGui , __version__ , __version_info__
127
+ import shiboken
119
128
# PySide 1.0.3 fixed the following:
120
129
# https://srinikom.github.io/pyside-bz-archive/809.html
121
130
if __version_info__ < (1 , 0 , 3 ):
122
131
raise ImportError ("PySide<1.0.3 is not supported" )
132
+ def _isdeleted (obj ): return not shiboken .isValid (obj )
123
133
_getSaveFileName = QtGui .QFileDialog .getSaveFileName
124
134
elif QT_API == QT_API_PYQT :
125
135
_setup_pyqt4_internal (api = 1 )
0 commit comments