Toolbox/PyQt4ImportHook.py

Mon, 24 Nov 2014 18:39:19 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 24 Nov 2014 18:39:19 +0100
changeset 3937
607dd5b0079b
parent 3936
93fb2fd523f1
child 3989
2d9778d49159
permissions
-rw-r--r--

Refined the PyQt4 compatibility stuff.

3776
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2014 Detlev Offenbach <detlev@die-offenbachs.de>
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
3936
93fb2fd523f1 Completed the PyQt4 override installation and startup.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3857
diff changeset
6 import sys
3776
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 try:
3936
93fb2fd523f1 Completed the PyQt4 override installation and startup.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3857
diff changeset
8 if "--pyqt4" in sys.argv:
3937
607dd5b0079b Refined the PyQt4 compatibility stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3936
diff changeset
9 sys.argv.remove("--pyqt4")
3936
93fb2fd523f1 Completed the PyQt4 override installation and startup.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3857
diff changeset
10 # fake a failed PyQt5 import
93fb2fd523f1 Completed the PyQt4 override installation and startup.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3857
diff changeset
11 raise ImportError
3776
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import PyQt5 # __IGNORE_WARNING__
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 except ImportError:
3777
0c47cbb5b199 Modified the PyQt4Importer to work with Python2 as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3776
diff changeset
14 import importlib
3776
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 class PyQt4Importer(object):
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 def __init__(self):
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 """
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 Constructor
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 """
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 self.__path = None
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 def find_module(self, fullname, path=None):
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 Public method returning the module loader.
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 @param fullname name of the module to be loaded (string)
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 @param path path to resolve the module name (string)
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 @return module loader object
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 """
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 if fullname.startswith("PyQt5"):
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 self.__path = path
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 return self
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 return None
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 def load_module(self, fullname):
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 Public method to load a module.
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @param fullname name of the module to be loaded (string)
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 @return reference to the loaded module (module)
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 """
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 if fullname in ["PyQt5.QtWidgets", "PyQt5.QtPrintSupport"]:
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 newname = "PyQt4.QtGui"
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 elif fullname in ["PyQt5.QtWebKitWidgets"]:
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 newname = "PyQt4.QtWebKit"
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 else:
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 newname = fullname.replace("PyQt5", "PyQt4")
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50
3777
0c47cbb5b199 Modified the PyQt4Importer to work with Python2 as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3776
diff changeset
51 module = importlib.import_module(newname)
3776
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 sys.modules[fullname] = module
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 if fullname == "PyQt5.QtCore":
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 import PyQt4.QtGui
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 module.qInstallMessageHandler = module.qInstallMsgHandler
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 module.QItemSelectionModel = PyQt4.QtGui.QItemSelectionModel
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 module.QItemSelection = PyQt4.QtGui.QItemSelection
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 module.QSortFilterProxyModel = \
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 PyQt4.QtGui.QSortFilterProxyModel
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 module.QAbstractProxyModel = PyQt4.QtGui.QAbstractProxyModel
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 module.QStringListModel = PyQt4.QtGui.QStringListModel
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 return module
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 sys.meta_path.insert(0, PyQt4Importer())
3857
f8b548d399bc Python2 compatibility with PyQt4 restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3777
diff changeset
65
f8b548d399bc Python2 compatibility with PyQt4 restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3777
diff changeset
66 if sys.version_info[0] == 2:
f8b548d399bc Python2 compatibility with PyQt4 restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3777
diff changeset
67 import sip
f8b548d399bc Python2 compatibility with PyQt4 restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3777
diff changeset
68 sip.setapi('QString', 2)
f8b548d399bc Python2 compatibility with PyQt4 restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3777
diff changeset
69 sip.setapi('QVariant', 2)
f8b548d399bc Python2 compatibility with PyQt4 restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3777
diff changeset
70 sip.setapi('QTextStream', 2)

eric ide

mercurial