diff --git a/src/Mod/AddonManager/addonmanager_python_deps_gui.py b/src/Mod/AddonManager/addonmanager_python_deps_gui.py index 4419b1635c..f8225b057d 100644 --- a/src/Mod/AddonManager/addonmanager_python_deps_gui.py +++ b/src/Mod/AddonManager/addonmanager_python_deps_gui.py @@ -1,7 +1,7 @@ # SPDX-License-Identifier: LGPL-2.1-or-later # *************************************************************************** # * * -# * Copyright (c) 2022-2024 FreeCAD Project Association AISBL * +# * Copyright (c) 2022-2025 FreeCAD Project Association AISBL * # * * # * This file is part of FreeCAD. * # * * @@ -38,15 +38,31 @@ import addonmanager_freecad_interface as fci try: from PySide import QtCore, QtGui, QtWidgets - from PySide.QtUiTools import QUiLoader except ImportError: try: from PySide6 import QtCore, QtGui, QtWidgets - from PySide6.QtUiTools import QUiLoader except ImportError: from PySide2 import QtCore, QtGui, QtWidgets + +# Make sure this can run inside and outside FreeCAD, and don't require that (when run inside FreeCAD) the user has the +# python QtUiTools installed, because FreeCAD wraps it for us. +try: + import FreeCADGui + + loadUi = FreeCADGui.PySideUic.loadUi +except ImportError: + try: + from PySide6.QtUiTools import QUiLoader + except ImportError: from PySide2.QtUiTools import QUiLoader + def loadUi(ui_file: str) -> QtWidgets.QWidget: + q_ui_file = QtCore.QFile(ui_file) + q_ui_file.open(QtCore.QFile.OpenModeFlag.ReadOnly) + loader = QUiLoader() + return loader.load(ui_file) + + try: from freecad.utils import get_python_exe except ImportError: @@ -210,12 +226,9 @@ class PythonPackageManager: optional: bool def __init__(self, addons): - ui_file = QtCore.QFile( + self.dlg = loadUi( os.path.join(os.path.dirname(__file__), "PythonDependencyUpdateDialog.ui") ) - ui_file.open(QtCore.QFile.OpenModeFlag.ReadOnly) - loader = QUiLoader() - self.dlg = loader.load(ui_file) self.addons = addons self.vendor_path = utils.get_pip_target_directory()