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:
@ -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}")
|
||||||
|
Reference in New Issue
Block a user