diff --git a/src/bitmessageqt/support.py b/src/bitmessageqt/support.py index 0496698c..081b86f7 100644 --- a/src/bitmessageqt/support.py +++ b/src/bitmessageqt/support.py @@ -144,7 +144,7 @@ def createSupportMessage(myapp): opensslversion = "%s (Python internal), %s (external for PyElliptic)" % ( ssl.OPENSSL_VERSION, OpenSSL._version) - qtapi = os.environ['QT_API'] + qtapi = os.environ.get('QT_API', 'fallback') frozen = "N/A" if paths.frozen: diff --git a/src/depends.py b/src/depends.py index b826ae6e..baa90e0a 100755 --- a/src/depends.py +++ b/src/depends.py @@ -3,6 +3,8 @@ Utility functions to check the availability of dependencies and suggest how it may be installed """ +# flake8: noqa:E402 + import sys # Only really old versions of Python don't have sys.hexversion. We don't @@ -365,9 +367,13 @@ def check_pyqt(): PyQt 4.8 or later. """ # pylint: disable=no-member - qtpy = try_import( - 'qtpy', - 'PyBitmessage requires qtpy, PyQt 4.8 or later and Qt 4.7 or later.') + try: + from fallback import qtpy + except ImportError: + logger.error( + 'PyBitmessage requires qtpy, PyQt 4.8 or later and Qt 4.7 or later.' + ) + qtpy = None if not qtpy: return False diff --git a/src/fallback/__init__.py b/src/fallback/__init__.py index 9a8d646f..8e48d76c 100644 --- a/src/fallback/__init__.py +++ b/src/fallback/__init__.py @@ -30,3 +30,30 @@ else: if data: hasher.update(data) return hasher + +try: + import qtpy +except ImportError: + try: + from PyQt5 import QtCore, QtGui, QtWidgets, QtNetwork, uic + except ImportError: + qtpy = None + else: + import sys + import types + + QtCore.Signal = QtCore.pyqtSignal + context = { + 'API': 'pyqt5', # for tr + 'PYQT_VERSION': QtCore.PYQT_VERSION_STR, + 'QT_VERSION': QtCore.QT_VERSION_STR, + 'QtCore': QtCore, + 'QtGui': QtGui, + 'QtWidgets': QtWidgets, + 'QtNetwork': QtNetwork, + 'uic': uic + } + qtpy = types.ModuleType( + 'qtpy', 'PyQt5 based dynamic fallback for qtpy') + qtpy.__dict__.update(context) + sys.modules['qtpy'] = qtpy diff --git a/src/tr.py b/src/tr.py index ddb06ec0..19ca4ff8 100644 --- a/src/tr.py +++ b/src/tr.py @@ -12,6 +12,7 @@ def _tr_dummy(context, text, disambiguation=None, n=None): if state.enableGUI and not state.curses: try: + from fallback import qtpy # noqa:F401 from qtpy import QtWidgets, QtCore, API except ImportError: _translate = _tr_dummy