Toolbox/PyQt4ImportHook.py

Sun, 31 Dec 2017 16:52:09 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 31 Dec 2017 16:52:09 +0100
changeset 6048
82ad8ec9548c
parent 5815
223fa32b3a32
child 6364
6a496f0886ad
permissions
-rw-r--r--

Updated copyright for 2018.

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
6048
82ad8ec9548c Updated copyright for 2018.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5815
diff changeset
3 # Copyright (c) 2014 - 2018 Detlev Offenbach <detlev@die-offenbachs.de>
3776
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
3991
73731c4bf5bd Corrected some coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3937
diff changeset
6 """
73731c4bf5bd Corrected some coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3937
diff changeset
7 Module implementing an import hook converting PyQt5 imports to PyQt4 imports.
73731c4bf5bd Corrected some coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3937
diff changeset
8 """
73731c4bf5bd Corrected some coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3937
diff changeset
9
4543
2e6a880670e9 Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4289
diff changeset
10 from __future__ import unicode_literals
2e6a880670e9 Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4289
diff changeset
11
3936
93fb2fd523f1 Completed the PyQt4 override installation and startup.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3857
diff changeset
12 import sys
5814
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
13 import importlib
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
14
5815
223fa32b3a32 Extended the doc style checker again and corrected some doc style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5814
diff changeset
15
5814
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
16 class PyQt4Importer(object):
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
17 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
18 Class implementing an importer converting PyQt5 imports to PyQt4
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
19 imports.
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
20 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
21 def __init__(self):
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
22 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
23 Constructor
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
24 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
25 self.__path = None
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
26
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
27 def find_module(self, fullname, path=None):
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
28 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
29 Public method returning the module loader.
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
30
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
31 @param fullname name of the module to be loaded (string)
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
32 @param path path to resolve the module name (string)
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
33 @return module loader object
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
34 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
35 if fullname.startswith("PyQt5"):
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
36 self.__path = path
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
37 return self
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
38
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
39 return None
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
40
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
41 @staticmethod
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
42 def QComboBox_currentData(other, role=None):
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
43 """
5815
223fa32b3a32 Extended the doc style checker again and corrected some doc style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5814
diff changeset
44 Static method to emulate the currentData method of Qt5.
5814
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
45
5815
223fa32b3a32 Extended the doc style checker again and corrected some doc style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5814
diff changeset
46 @param other reference to the combo box to get the user data of
223fa32b3a32 Extended the doc style checker again and corrected some doc style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5814
diff changeset
47 @type QComboBox
223fa32b3a32 Extended the doc style checker again and corrected some doc style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5814
diff changeset
48 @param role role of which data should be retrieved
223fa32b3a32 Extended the doc style checker again and corrected some doc style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5814
diff changeset
49 @type int
5814
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
50 @return stored data at current selection
5815
223fa32b3a32 Extended the doc style checker again and corrected some doc style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5814
diff changeset
51 @rtype any
5814
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
52 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
53 import PyQt4.Qt
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
54 if role is None:
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
55 role = PyQt4.Qt.Qt.UserRole
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
56
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
57 idx = other.currentIndex()
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
58 return other.itemData(idx, role)
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
59
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
60 def load_module(self, fullname):
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
61 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
62 Public method to load a module.
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
63
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
64 @param fullname name of the module to be loaded (string)
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
65 @return reference to the loaded module (module)
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
66 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
67 if fullname in ["PyQt5.QtWidgets", "PyQt5.QtPrintSupport"]:
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
68 newname = "PyQt4.QtGui"
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
69 elif fullname in ["PyQt5.QtWebKitWidgets"]:
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
70 newname = "PyQt4.QtWebKit"
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
71 else:
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
72 newname = fullname.replace("PyQt5", "PyQt4")
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
73
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
74 module = importlib.import_module(newname)
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
75 sys.modules[fullname] = module
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
76 if fullname == "PyQt5.QtCore":
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
77 import PyQt4.QtGui
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
78 module.qInstallMessageHandler = module.qInstallMsgHandler
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
79 module.QItemSelectionModel = PyQt4.QtGui.QItemSelectionModel
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
80 module.QItemSelection = PyQt4.QtGui.QItemSelection
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
81 module.QSortFilterProxyModel = \
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
82 PyQt4.QtGui.QSortFilterProxyModel
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
83 module.QAbstractProxyModel = PyQt4.QtGui.QAbstractProxyModel
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
84 module.QStringListModel = PyQt4.QtGui.QStringListModel
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
85
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
86 PyQt4.QtGui.QComboBox.currentData = self.QComboBox_currentData
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
87 return module
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
88
3776
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 try:
3936
93fb2fd523f1 Completed the PyQt4 override installation and startup.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3857
diff changeset
90 if "--pyqt4" in sys.argv:
3937
607dd5b0079b Refined the PyQt4 compatibility stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3936
diff changeset
91 sys.argv.remove("--pyqt4")
3936
93fb2fd523f1 Completed the PyQt4 override installation and startup.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3857
diff changeset
92 # fake a failed PyQt5 import
93fb2fd523f1 Completed the PyQt4 override installation and startup.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3857
diff changeset
93 raise ImportError
4289
6c1ab651c9ce Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4021
diff changeset
94 import PyQt5 # __IGNORE_WARNING__
3776
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 except ImportError:
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 sys.meta_path.insert(0, PyQt4Importer())
3857
f8b548d399bc Python2 compatibility with PyQt4 restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3777
diff changeset
97
f8b548d399bc Python2 compatibility with PyQt4 restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3777
diff changeset
98 if sys.version_info[0] == 2:
f8b548d399bc Python2 compatibility with PyQt4 restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3777
diff changeset
99 import sip
f8b548d399bc Python2 compatibility with PyQt4 restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3777
diff changeset
100 sip.setapi('QString', 2)
f8b548d399bc Python2 compatibility with PyQt4 restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3777
diff changeset
101 sip.setapi('QVariant', 2)
f8b548d399bc Python2 compatibility with PyQt4 restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3777
diff changeset
102 sip.setapi('QTextStream', 2)

eric ide

mercurial