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