diff options
author | Christian Tismer <tismer@stackless.com> | 2019-06-29 12:02:37 +0200 |
---|---|---|
committer | Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io> | 2019-07-01 14:28:09 +0000 |
commit | bd27bac457943aab1082ac1c5b3f81ef9574c671 (patch) | |
tree | 009768ec8a57ada13da7764e02231818a34a2a05 | |
parent | a2405a27e738e7a7bb379ed0ada07b317650ca09 (diff) |
Fix classes from modules imports in pyside2-uic V2
This version replaces the pyside2_modules variable
by PySide2.__all__ .
The complication was that pyside2uic uses strict layering,
and so it was a bit fiddly to get at PySide2.
This project will be modernized, soon.
Fixes: PYSIDE-1020
Change-Id: Ia58fe4986919525a70ea7cc453c64cdf46e7fba1
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
-rw-r--r-- | pyside2uic/Compiler/compiler.py | 4 | ||||
-rw-r--r-- | pyside2uic/Compiler/qobjectcreator.py | 24 | ||||
-rw-r--r-- | pyside2uic/__init__.py.in | 3 |
3 files changed, 12 insertions, 19 deletions
diff --git a/pyside2uic/Compiler/compiler.py b/pyside2uic/Compiler/compiler.py index 2013170..df6bb88 100644 --- a/pyside2uic/Compiler/compiler.py +++ b/pyside2uic/Compiler/compiler.py @@ -32,9 +32,9 @@ from pyside2uic.Compiler.misc import write_import class UICompiler(UIParser): - def __init__(self): + def __init__(self, all_pyside2_modules): UIParser.__init__(self, qtproxies.QtCore, qtproxies.QtGui, qtproxies.QtWidgets, - CompilerCreatorPolicy()) + CompilerCreatorPolicy(all_pyside2_modules)) def reset(self): qtproxies.i18n_strings = [] diff --git a/pyside2uic/Compiler/qobjectcreator.py b/pyside2uic/Compiler/qobjectcreator.py index 0e35e47..a8e2a31 100644 --- a/pyside2uic/Compiler/qobjectcreator.py +++ b/pyside2uic/Compiler/qobjectcreator.py @@ -36,6 +36,8 @@ from pyside2uic.Compiler.qtproxies import (QtWidgets, QtGui, Literal, logger = logging.getLogger(__name__) DEBUG = logger.debug +pyside2_modules = [] # will be updated by CompilerCreatorPolicy + class _QtGuiWrapper(object): def search(clsname): @@ -89,17 +91,6 @@ class _CustomWidgetLoader(object): def __init__(self): self._widgets = {} self._usedWidgets = set() - self.pyside2_modules = ("Qt3DAnimation", "Qt3DCore", "Qt3DExtras", "Qt3DInput", - "Qt3DLogic", "Qt3DRender", "QtAxContainer", "QtCharts", "QtConcurrent", - "QtCore", "QtDataVisualization", "QtGui", "QtHelp", "QtLocation", - "QtMacExtras", "QtMultimedia", "QtMultimediaWidgets", "QtNetwork", - "QtOpenGL", "QtOpenGLFunctions", "QtPositioning", "QtPrintSupport", - "QtQml", "QtQuick", "QtQuickWidgets", "QtRemoteObjects", "QtScript", - "QtScriptTools", "QtScxml", "QtSensors", "QtSql", "QtSvg", "QtTest", - "QtTextToSpeech", "QtUiTools", "QtWebChannel", "QtWebEngine", - "QtWebEngineCore", "QtWebEngineWidgets", "QtWebKit", "QtWebKitWidgets", - "QtWebSockets", "QtWidgets", "QtWinExtras", "QtX11Extras", "QtXml", - "QtXmlPatterns") def addCustomWidget(self, widgetClass, baseClass, module): @@ -140,16 +131,17 @@ class _CustomWidgetLoader(object): imports.setdefault(module, []).append(widget) for module, classes in imports.items(): - split = module.split(".") - if (len(split) == 2 and not split[0].startswith("PySide2") - and split[0] in self.pyside2_modules): - module = "PySide2.{}".format(split[0]) + parts = module.split(".") + if (len(parts) == 2 and not parts[0].startswith("PySide2") + and parts[0] in pyside2_modules): + module = "PySide2.{}".format(parts[0]) write_code("from %s import %s" % (module, ", ".join(classes))) class CompilerCreatorPolicy(object): - def __init__(self): + def __init__(self, all_pyside2_modules): self._modules = [] + pyside2_modules[:] = all_pyside2_modules def createQtGuiWrapper(self): return _QtGuiWrapper diff --git a/pyside2uic/__init__.py.in b/pyside2uic/__init__.py.in index 8d48844..b3f4f55 100644 --- a/pyside2uic/__init__.py.in +++ b/pyside2uic/__init__.py.in @@ -140,7 +140,8 @@ def compileUi(uifile, pyfile, execute=False, indent=4, from_imports=False): global PySideToolsVersion pyfile.write(_header % (uifname, uifname, ctime(), __version__, PySide2.__version__)) - winfo = compiler.UICompiler().compileUi(uifile, pyfile, from_imports) + ui_comp = compiler.UICompiler(PySide2.__all__) + winfo = ui_comp.compileUi(uifile, pyfile, from_imports) if execute: indenter.write_code(_display_code % winfo) |