6464
6565
6666def _setup_pyqt5 ():
67- global QtCore , QtGui , QtWidgets , __version__ , is_pyqt5 , _getSaveFileName
67+ global QtCore , QtGui , QtWidgets , __version__ , is_pyqt5 , \
68+ _isdeleted , _getSaveFileName
6869
6970 if QT_API == QT_API_PYQT5 :
7071 from PyQt5 import QtCore , QtGui , QtWidgets
72+ import sip
7173 __version__ = QtCore .PYQT_VERSION_STR
7274 QtCore .Signal = QtCore .pyqtSignal
7375 QtCore .Slot = QtCore .pyqtSlot
7476 QtCore .Property = QtCore .pyqtProperty
77+ _isdeleted = sip .isdeleted
7578 elif QT_API == QT_API_PYSIDE2 :
7679 from PySide2 import QtCore , QtGui , QtWidgets , __version__
80+ import shiboken2
81+ def _isdeleted (obj ): return not shiboken2 .isValid (obj )
7782 else :
7883 raise ValueError ("Unexpected value for the 'backend.qt5' rcparam" )
7984 _getSaveFileName = QtWidgets .QFileDialog .getSaveFileName
@@ -83,7 +88,8 @@ def is_pyqt5():
8388
8489
8590def _setup_pyqt4 ():
86- global QtCore , QtGui , QtWidgets , __version__ , is_pyqt5 , _getSaveFileName
91+ global QtCore , QtGui , QtWidgets , __version__ , is_pyqt5 , \
92+ _isdeleted , _getSaveFileName
8793
8894 def _setup_pyqt4_internal (api ):
8995 global QtCore , QtGui , QtWidgets , \
@@ -103,6 +109,7 @@ def _setup_pyqt4_internal(api):
103109 except ValueError :
104110 pass
105111 from PyQt4 import QtCore , QtGui
112+ import sip # Always succeeds *after* importing PyQt4.
106113 __version__ = QtCore .PYQT_VERSION_STR
107114 # PyQt 4.6 introduced getSaveFileNameAndFilter:
108115 # https://riverbankcomputing.com/news/pyqt-46
@@ -111,16 +118,19 @@ def _setup_pyqt4_internal(api):
111118 QtCore .Signal = QtCore .pyqtSignal
112119 QtCore .Slot = QtCore .pyqtSlot
113120 QtCore .Property = QtCore .pyqtProperty
121+ _isdeleted = sip .isdeleted
114122 _getSaveFileName = QtGui .QFileDialog .getSaveFileNameAndFilter
115123
116124 if QT_API == QT_API_PYQTv2 :
117125 _setup_pyqt4_internal (api = 2 )
118126 elif QT_API == QT_API_PYSIDE :
119127 from PySide import QtCore , QtGui , __version__ , __version_info__
128+ import shiboken
120129 # PySide 1.0.3 fixed the following:
121130 # https://srinikom.github.io/pyside-bz-archive/809.html
122131 if __version_info__ < (1 , 0 , 3 ):
123132 raise ImportError ("PySide<1.0.3 is not supported" )
133+ def _isdeleted (obj ): return not shiboken .isValid (obj )
124134 _getSaveFileName = QtGui .QFileDialog .getSaveFileName
125135 elif QT_API == QT_API_PYQT :
126136 _setup_pyqt4_internal (api = 1 )
0 commit comments