PyQt5 based qtpy fallback

This commit is contained in:
Dmitri Bogomolov 2019-02-11 18:48:57 +02:00
parent f4eae01886
commit 973ef47549
Signed by untrusted user: g1itch
GPG Key ID: 720A756F18DEED13
4 changed files with 44 additions and 4 deletions

View File

@ -145,7 +145,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:

View File

@ -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

View File

@ -30,3 +30,36 @@ 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
}
try:
from PyQt5 import QtTest
except ImportError:
pass
else:
context['QtTest'] = QtTest
qtpy = types.ModuleType(
'qtpy', 'PyQt5 based dynamic fallback for qtpy')
qtpy.__dict__.update(context)
sys.modules['qtpy'] = qtpy

View File

@ -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