def closeEvent(self, event): """ Make sure all is shut down properly. With `shiboken2.isValid` we can avoid try/excepting this RuntimeError: Internal C++ object already deleted. which would be inevitable without further book keeping. """ if shiboken6.isValid(self.thread) and self.thread is not None: # If not interrupted already, request and wait as long as it takes. self.thread.requestInterruption() while self.thread.isRunning(): time.sleep(0.05) return super(SimpleThreadDemo, self).closeEvent(event)
def is_deleted(obj) -> bool: if qt.API == "pyside2": import shiboken2 return not shiboken2.isValid(obj) elif qt.API == "pyside6": import shiboken6 return not shiboken6.isValid(obj) elif qt.API == "pyqt5": try: from PyQt5 import sip except ImportError: import sip # type: ignore[import, no-redef] return sip.isdeleted(obj) else: try: from PyQt6 import sip except ImportError: import sip # type: ignore[import, no-redef] return sip.isdeleted(obj)
def _isdeleted(obj): return not shiboken6.isValid(obj)
def _isdeleted(obj): return not shiboken6.isValid(obj) elif QT_API == QT_API_PYQT5: