diff --git a/Qt.py b/Qt.py
index 29a19e00..a2c35ec9 100644
--- a/Qt.py
+++ b/Qt.py
@@ -29,6 +29,7 @@
"""
import os
+import re
import sys
import shutil
@@ -195,7 +196,7 @@ def _pyside2():
_remap(QtCore, "QStringListModel", QtGui.QStringListModel)
_add(PySide2, "__binding__", PySide2.__name__)
- _add(PySide2, "load_ui", lambda fname: QtUiTools.QUiLoader().load(fname))
+ _add(PySide2, "load_ui", _pyside_loadui)
_add(PySide2, "translate", lambda context, sourceText, disambiguation, n: (
QtCore.QCoreApplication(context, sourceText,
disambiguation, None, n)))
@@ -227,7 +228,7 @@ def _pyside():
pass
_add(PySide, "__binding__", PySide.__name__)
- _add(PySide, "load_ui", lambda fname: QtUiTools.QUiLoader().load(fname))
+ _add(PySide, "load_ui", _pyside_loadui)
_add(PySide, "translate", lambda context, sourceText, disambiguation, n: (
QtCore.QCoreApplication(context, sourceText,
disambiguation, None, n)))
@@ -238,6 +239,28 @@ def _pyside():
return PySide
+def _pyside_loadui(fname):
+ '''
+ this function is for PySide load_ui bug when there are custom widgets in the ui file
+ '''
+ import PySide.QtUiTools as QtUiTools
+ import importlib
+ loader = QtUiTools.QUiLoader()
+ # get custom_widget
+ with open(fname) as ui_file:
+ all_xml = ui_file.read()
+ custom_wgt_xmls = re.findall(r'.*?', all_xml, re.S)
+ for cus_wgt_xml in custom_wgt_xmls:
+ class_search = re.search(r"(.*?)", cus_wgt_xml, re.S)
+ class_name = class_search.group(1)
+ module_search = re.search(r"(.*?)", cus_wgt_xml, re.S)
+ module_name = module_search.group(1).replace("/", ".")
+ # import and register
+ module = importlib.import_module(module_name)
+ loader.registerCustomWidget(getattr(module, class_name))
+ return loader.load(fname)
+
+
def _log(text, verbose):
if verbose:
sys.stdout.write(text + "\n")