--- a/eric6/Toolbox/PyQt4ImportHook.py Sat Sep 07 14:45:27 2019 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,105 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2014 - 2019 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing an import hook converting PyQt5 imports to PyQt4 imports. -""" - -from __future__ import unicode_literals - -import sys -import importlib - - -class PyQt4Importer(object): - """ - Class implementing an importer converting PyQt5 imports to PyQt4 - imports. - """ - def __init__(self): - """ - Constructor - """ - self.__path = None - - def find_module(self, fullname, path=None): - """ - Public method returning the module loader. - - @param fullname name of the module to be loaded (string) - @param path path to resolve the module name (string) - @return module loader object - """ - if fullname.startswith("PyQt5"): - self.__path = path - return self - - return None - - @staticmethod - def QComboBox_currentData(other, role=None): - """ - Static method to emulate the currentData method of Qt5. - - @param other reference to the combo box to get the user data of - @type QComboBox - @param role role of which data should be retrieved - @type int - @return stored data at current selection - @rtype any - """ - import PyQt4.Qt - if role is None: - role = PyQt4.Qt.Qt.UserRole - - idx = other.currentIndex() - return other.itemData(idx, role) - - def load_module(self, fullname): - """ - Public method to load a module. - - @param fullname name of the module to be loaded (string) - @return reference to the loaded module (module) - """ - if fullname in ["PyQt5.QtWidgets", "PyQt5.QtPrintSupport"]: - newname = "PyQt4.QtGui" - elif fullname in ["PyQt5.QtWebKitWidgets"]: - newname = "PyQt4.QtWebKit" - else: - newname = fullname.replace("PyQt5", "PyQt4") - - module = importlib.import_module(newname) - sys.modules[fullname] = module - if fullname == "PyQt5.QtCore": - import PyQt4.QtGui - module.qInstallMessageHandler = module.qInstallMsgHandler - module.QItemSelectionModel = PyQt4.QtGui.QItemSelectionModel - module.QItemSelection = PyQt4.QtGui.QItemSelection - module.QSortFilterProxyModel = \ - PyQt4.QtGui.QSortFilterProxyModel - module.QAbstractProxyModel = PyQt4.QtGui.QAbstractProxyModel - module.QStringListModel = PyQt4.QtGui.QStringListModel - - PyQt4.QtGui.QComboBox.currentData = self.QComboBox_currentData - return module - -try: - if "--pyqt4" in sys.argv: - sys.argv.remove("--pyqt4") - # fake a failed PyQt5 import - raise ImportError - import PyQt5 # __IGNORE_WARNING__ -except ImportError: - sys.meta_path.insert(0, PyQt4Importer()) - - if sys.version_info[0] == 2: - try: - from PyQt5 import sip - except ImportError: - import sip - sip.setapi('QString', 2) - sip.setapi('QVariant', 2) - sip.setapi('QTextStream', 2)