1
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2026-03-11 11:17:49 +01:00

feat(utils):ui custom loader moved to utils and integrated into UILoader

This commit is contained in:
2024-06-25 20:00:55 +02:00
parent 2693ce4c38
commit 4a36f4f717

View File

@@ -1,7 +1,37 @@
from qtpy import QT_VERSION
from qtpy import QT_VERSION, PYSIDE6, PYQT6
from qtpy.QtCore import QFile, QIODevice
if PYSIDE6:
from PySide6.QtUiTools import QUiLoader
from bec_widgets.examples.plugin_example_pyside.tictactoe import TicTacToe
from bec_widgets.widgets.bec_status_box.bec_status_box import BECStatusBox
from bec_widgets.widgets.device_inputs import DeviceComboBox, DeviceLineEdit
from bec_widgets.widgets.vscode.vscode import VSCodeEditor
from bec_widgets.widgets.scan_control import ScanControl
class CustomUiLoader(QUiLoader):
def __init__(self, baseinstance):
super(CustomUiLoader, self).__init__(baseinstance)
self.custom_widgets = {
"TicTacToe": TicTacToe,
"VSCodeEditor": VSCodeEditor,
"BECStatusBox": BECStatusBox,
"DeviceLineEdit": DeviceLineEdit,
"DeviceComboBox": DeviceComboBox,
"ScanControl": ScanControl,
}
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(CustomUiLoader, self).createWidget(class_name, parent, name)
class UILoader:
"""Universal UI loader for PyQt5, PyQt6, PySide2, and PySide6."""
@@ -14,14 +44,14 @@ class UILoader:
self.loader = uic.loadUi
elif QT_VERSION.startswith("6"):
# PyQt6 or PySide6
try:
from PySide6.QtUiTools import QUiLoader
if PYSIDE6:
self.loader = self.load_ui_pyside6
except ImportError:
elif PYQT6:
from PyQt6.uic import loadUi
self.loader = loadUi
else:
raise ImportError("No compatible Qt bindings found.")
def load_ui_pyside6(self, ui_file, parent=None):
"""
@@ -33,9 +63,8 @@ class UILoader:
Returns:
QWidget: The loaded widget.
"""
from PySide6.QtUiTools import QUiLoader
loader = QUiLoader(parent)
loader = CustomUiLoader(parent)
file = QFile(ui_file)
if not file.open(QIODevice.ReadOnly):
raise IOError(f"Cannot open file: {ui_file}")