Gui: implement a workaround for MSYS2 to access QUiLoader via its Python interface

This commit is contained in:
wmayer
2021-09-23 09:46:20 +02:00
parent 00759f9c96
commit 0d2451a20a
4 changed files with 440 additions and 43 deletions

View File

@@ -3,16 +3,18 @@ EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c
OUTPUT_VARIABLE python_libs OUTPUT_STRIP_TRAILING_WHITESPACE )
SET(PYTHON_MAIN_DIR ${python_libs})
set(NAMESPACE_INIT "${CMAKE_BINARY_DIR}/Ext/freecad/__init__.py")
set(NAMESPACE_DIR "${CMAKE_BINARY_DIR}/Ext/freecad")
set(NAMESPACE_INIT "${NAMESPACE_DIR}/__init__.py")
if (WIN32)
get_filename_component(FREECAD_LIBRARY_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}"
get_filename_component(FREECAD_LIBRARY_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}"
REALPATH BASE_DIR "${CMAKE_INSTALL_PREFIX}")
set( ${CMAKE_INSTALL_BINDIR})
set( ${CMAKE_INSTALL_BINDIR})
else()
set(FREECAD_LIBRARY_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR})
set(FREECAD_LIBRARY_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR})
endif()
configure_file(__init__.py.template ${NAMESPACE_INIT})
configure_file(UiTools.py ${NAMESPACE_DIR}/UiTools.py)
if (INSTALL_TO_SITEPACKAGES)
SET(SITE_PACKAGE_DIR ${PYTHON_MAIN_DIR}/freecad)
@@ -23,6 +25,7 @@ endif()
INSTALL(
FILES
${NAMESPACE_INIT}
UiTools.py
DESTINATION
${SITE_PACKAGE_DIR}
)

View File

@@ -0,0 +1,21 @@
# (c) 2021 Werner Mayer LGPL
from PySide2 import QtUiTools
from PySide2 import QtCore
import FreeCADGui as Gui
class QUiLoader(QtUiTools.QUiLoader):
"""
This is an extension of Qt's QUiLoader to also create custom widgets
"""
def __init__(self, arg = None):
super(QUiLoader, self).__init__(arg)
self.ui = Gui.PySideUic
def createWidget(self, className, parent = None, name = ""):
widget = self.ui.createCustomWidget(className, parent, name)
if not widget:
widget = super(QUiLoader, self).createWidget(className, parent, name)
return widget