0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-14 11:41:49 +02:00

fix(ui_loader): ui loader is compatible with bec plugins

This commit is contained in:
2024-07-02 21:16:28 +02:00
parent 25ef7c05e6
commit b787759f44

View File

@ -1,6 +1,30 @@
from qtpy import QT_VERSION from qtpy import PYQT6, PYSIDE6, QT_VERSION
from qtpy.QtCore import QFile, QIODevice from qtpy.QtCore import QFile, QIODevice
if PYSIDE6:
from PySide6.QtUiTools import QUiLoader
from bec_widgets.utils.plugin_utils import get_rpc_classes
from bec_widgets.widgets.buttons.color_button.color_button import ColorButton
class CustomUiLoader(QUiLoader):
def __init__(self, baseinstance):
super().__init__(baseinstance)
widgets = get_rpc_classes("bec_widgets").get("top_level_classes", [])
widgets.append(ColorButton)
self.custom_widgets = {widget.__name__: widget for widget in widgets}
self.baseinstance = baseinstance
def createWidget(self, class_name, parent=None, name=""):
if class_name in self.custom_widgets:
widget = self.custom_widgets[class_name](parent)
widget.setObjectName(name)
return widget
return super().createWidget(class_name, parent, name)
class UILoader: class UILoader:
"""Universal UI loader for PyQt5, PyQt6, PySide2, and PySide6.""" """Universal UI loader for PyQt5, PyQt6, PySide2, and PySide6."""
@ -14,14 +38,14 @@ class UILoader:
self.loader = uic.loadUi self.loader = uic.loadUi
elif QT_VERSION.startswith("6"): elif QT_VERSION.startswith("6"):
# PyQt6 or PySide6 # PyQt6 or PySide6
try: if PYSIDE6:
from PySide6.QtUiTools import QUiLoader
self.loader = self.load_ui_pyside6 self.loader = self.load_ui_pyside6
except ImportError: elif PYQT6:
from PyQt6.uic import loadUi from PyQt6.uic import loadUi
self.loader = loadUi self.loader = loadUi
else:
raise ImportError("No compatible Qt bindings found.")
def load_ui_pyside6(self, ui_file, parent=None): def load_ui_pyside6(self, ui_file, parent=None):
""" """
@ -33,9 +57,8 @@ class UILoader:
Returns: Returns:
QWidget: The loaded widget. QWidget: The loaded widget.
""" """
from PySide6.QtUiTools import QUiLoader
loader = QUiLoader(parent) loader = CustomUiLoader(parent)
file = QFile(ui_file) file = QFile(ui_file)
if not file.open(QIODevice.ReadOnly): if not file.open(QIODevice.ReadOnly):
raise IOError(f"Cannot open file: {ui_file}") raise IOError(f"Cannot open file: {ui_file}")