mirror of
https://github.com/bec-project/bec_widgets.git
synced 2025-07-14 03:31:50 +02:00
refactor: isort import formatting
This commit is contained in:
@ -1,2 +1,3 @@
|
|||||||
black --line-length=100 $(git diff --cached --name-only --diff-filter=ACM -- '***.py')
|
black --line-length=100 $(git diff --cached --name-only --diff-filter=ACM -- '*.py')
|
||||||
git add $(git diff --cached --name-only --diff-filter=ACM -- '***.py')
|
isort --line-length=100 --profile=black --multi-line=3 --trailing-comma $(git diff --cached --name-only --diff-filter=ACM -- '*.py')
|
||||||
|
git add $(git diff --cached --name-only --diff-filter=ACM -- '*.py')
|
@ -23,7 +23,8 @@ formatter:
|
|||||||
stage: Formatter
|
stage: Formatter
|
||||||
needs: []
|
needs: []
|
||||||
script:
|
script:
|
||||||
- pip install black
|
- pip install black isort
|
||||||
|
- isort --check --diff --line-length=100 --profile=black --multi-line=3 --trailing-comma ./
|
||||||
- black --check --diff --color --line-length=100 ./
|
- black --check --diff --color --line-length=100 ./
|
||||||
pylint:
|
pylint:
|
||||||
stage: Formatter
|
stage: Formatter
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
# pylint: disable=missing-module-docstring
|
# pylint: disable=missing-module-docstring
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import inspect
|
import inspect
|
||||||
import black
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
import black
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
if sys.version_info >= (3, 11):
|
||||||
from typing import get_overloads
|
from typing import get_overloads
|
||||||
@ -106,11 +107,11 @@ class {class_name}(RPCBase):"""
|
|||||||
if __name__ == "__main__": # pragma: no cover
|
if __name__ == "__main__": # pragma: no cover
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from bec_widgets.widgets.figure import BECFigure
|
|
||||||
from bec_widgets.widgets.plots import BECPlotBase, BECWaveform1D, BECImageShow
|
|
||||||
from bec_widgets.widgets.plots.waveform1d import BECCurve
|
|
||||||
from bec_widgets.widgets.plots.image import BECImageItem
|
|
||||||
from bec_widgets.utils import BECConnector
|
from bec_widgets.utils import BECConnector
|
||||||
|
from bec_widgets.widgets.figure import BECFigure
|
||||||
|
from bec_widgets.widgets.plots import BECImageShow, BECPlotBase, BECWaveform1D
|
||||||
|
from bec_widgets.widgets.plots.image import BECImageItem
|
||||||
|
from bec_widgets.widgets.plots.waveform1d import BECCurve
|
||||||
|
|
||||||
current_path = os.path.dirname(__file__)
|
current_path = os.path.dirname(__file__)
|
||||||
client_path = os.path.join(current_path, "client.py")
|
client_path = os.path.join(current_path, "client.py")
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import inspect
|
import inspect
|
||||||
|
|
||||||
|
from bec_lib import MessageEndpoints, messages
|
||||||
from qtpy.QtCore import QTimer
|
from qtpy.QtCore import QTimer
|
||||||
|
|
||||||
from bec_lib import MessageEndpoints, messages
|
|
||||||
from bec_widgets.utils import BECDispatcher
|
from bec_widgets.utils import BECDispatcher
|
||||||
from bec_widgets.utils.bec_connector import BECConnector
|
from bec_widgets.utils.bec_connector import BECConnector
|
||||||
from bec_widgets.widgets.figure import BECFigure
|
from bec_widgets.widgets.figure import BECFigure
|
||||||
@ -115,8 +115,7 @@ if __name__ == "__main__": # pragma: no cover
|
|||||||
import argparse
|
import argparse
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from qtpy.QtWidgets import QApplication
|
from qtpy.QtWidgets import QApplication, QMainWindow
|
||||||
from qtpy.QtWidgets import QMainWindow
|
|
||||||
|
|
||||||
app = QApplication(sys.argv)
|
app = QApplication(sys.argv)
|
||||||
app.setApplicationName("BEC Figure")
|
app.setApplicationName("BEC Figure")
|
||||||
|
@ -2,8 +2,8 @@ from .motor_movement import (
|
|||||||
MotorControlApp,
|
MotorControlApp,
|
||||||
MotorControlMap,
|
MotorControlMap,
|
||||||
MotorControlPanel,
|
MotorControlPanel,
|
||||||
MotorControlPanelRelative,
|
|
||||||
MotorControlPanelAbsolute,
|
MotorControlPanelAbsolute,
|
||||||
|
MotorControlPanelRelative,
|
||||||
MotorCoordinateTable,
|
MotorCoordinateTable,
|
||||||
MotorThread,
|
MotorThread,
|
||||||
)
|
)
|
||||||
|
@ -6,20 +6,11 @@ import h5py
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import pyqtgraph as pg
|
import pyqtgraph as pg
|
||||||
import zmq
|
import zmq
|
||||||
|
from pyqtgraph.Qt import uic
|
||||||
from qtpy.QtCore import Signal as pyqtSignal
|
from qtpy.QtCore import Signal as pyqtSignal
|
||||||
from qtpy.QtCore import Slot as pyqtSlot
|
from qtpy.QtCore import Slot as pyqtSlot
|
||||||
from qtpy.QtGui import QKeySequence
|
from qtpy.QtGui import QKeySequence
|
||||||
from qtpy.QtWidgets import (
|
from qtpy.QtWidgets import QDialog, QFileDialog, QFrame, QLabel, QShortcut, QVBoxLayout, QWidget
|
||||||
QWidget,
|
|
||||||
QFileDialog,
|
|
||||||
QShortcut,
|
|
||||||
QDialog,
|
|
||||||
QVBoxLayout,
|
|
||||||
QLabel,
|
|
||||||
QFrame,
|
|
||||||
)
|
|
||||||
from pyqtgraph.Qt import uic
|
|
||||||
|
|
||||||
|
|
||||||
# from scipy.stats import multivariate_normal
|
# from scipy.stats import multivariate_normal
|
||||||
|
|
||||||
@ -307,6 +298,7 @@ class EigerPlot(QWidget):
|
|||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from qtpy.QtWidgets import QApplication
|
from qtpy.QtWidgets import QApplication
|
||||||
|
|
||||||
app = QApplication(sys.argv)
|
app = QApplication(sys.argv)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from qtpy import uic
|
from qtpy import uic
|
||||||
from qtpy.QtWidgets import QMainWindow, QApplication
|
from qtpy.QtWidgets import QApplication, QMainWindow
|
||||||
|
|
||||||
from bec_widgets.utils.bec_dispatcher import BECDispatcher
|
from bec_widgets.utils.bec_dispatcher import BECDispatcher
|
||||||
from bec_widgets.widgets import BECMonitor
|
from bec_widgets.widgets import BECMonitor
|
||||||
|
@ -2,8 +2,8 @@ from .motor_control_compilations import (
|
|||||||
MotorControlApp,
|
MotorControlApp,
|
||||||
MotorControlMap,
|
MotorControlMap,
|
||||||
MotorControlPanel,
|
MotorControlPanel,
|
||||||
MotorControlPanelRelative,
|
|
||||||
MotorControlPanelAbsolute,
|
MotorControlPanelAbsolute,
|
||||||
|
MotorControlPanelRelative,
|
||||||
MotorCoordinateTable,
|
MotorCoordinateTable,
|
||||||
MotorThread,
|
MotorThread,
|
||||||
)
|
)
|
||||||
|
@ -1,22 +1,17 @@
|
|||||||
# pylint: disable = no-name-in-module,missing-class-docstring, missing-module-docstring
|
# pylint: disable = no-name-in-module,missing-class-docstring, missing-module-docstring
|
||||||
|
|
||||||
import qdarktheme
|
import qdarktheme
|
||||||
from qtpy.QtWidgets import QApplication
|
|
||||||
from qtpy.QtWidgets import QVBoxLayout
|
|
||||||
from qtpy.QtWidgets import (
|
|
||||||
QWidget,
|
|
||||||
QSplitter,
|
|
||||||
)
|
|
||||||
from qtpy.QtCore import Qt
|
from qtpy.QtCore import Qt
|
||||||
|
from qtpy.QtWidgets import QApplication, QSplitter, QVBoxLayout, QWidget
|
||||||
|
|
||||||
from bec_widgets.utils.bec_dispatcher import BECDispatcher
|
from bec_widgets.utils.bec_dispatcher import BECDispatcher
|
||||||
from bec_widgets.widgets import (
|
from bec_widgets.widgets import (
|
||||||
MotorControlAbsolute,
|
MotorControlAbsolute,
|
||||||
MotorControlRelative,
|
MotorControlRelative,
|
||||||
MotorControlSelection,
|
MotorControlSelection,
|
||||||
MotorThread,
|
|
||||||
MotorMap,
|
|
||||||
MotorCoordinateTable,
|
MotorCoordinateTable,
|
||||||
|
MotorMap,
|
||||||
|
MotorThread,
|
||||||
)
|
)
|
||||||
|
|
||||||
CONFIG_DEFAULT = {
|
CONFIG_DEFAULT = {
|
||||||
|
@ -5,29 +5,28 @@ from functools import partial
|
|||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pyqtgraph as pg
|
import pyqtgraph as pg
|
||||||
|
from bec_lib import MessageEndpoints, messages
|
||||||
|
from pyqtgraph.Qt import QtCore, QtWidgets, uic
|
||||||
from qtpy import QtGui
|
from qtpy import QtGui
|
||||||
from qtpy.QtCore import QThread, Slot as pyqtSlot
|
from qtpy.QtCore import Qt, QThread
|
||||||
from qtpy.QtCore import Signal as pyqtSignal, Qt
|
from qtpy.QtCore import Signal as pyqtSignal
|
||||||
from qtpy.QtGui import QDoubleValidator
|
from qtpy.QtCore import Slot as pyqtSlot
|
||||||
from qtpy.QtGui import QKeySequence
|
from qtpy.QtGui import QDoubleValidator, QKeySequence
|
||||||
from qtpy.QtWidgets import (
|
from qtpy.QtWidgets import (
|
||||||
QApplication,
|
QApplication,
|
||||||
QWidget,
|
|
||||||
QFileDialog,
|
|
||||||
QDialog,
|
QDialog,
|
||||||
QVBoxLayout,
|
QFileDialog,
|
||||||
QLabel,
|
|
||||||
QPushButton,
|
|
||||||
QFrame,
|
QFrame,
|
||||||
|
QLabel,
|
||||||
|
QMessageBox,
|
||||||
|
QPushButton,
|
||||||
|
QShortcut,
|
||||||
|
QVBoxLayout,
|
||||||
|
QWidget,
|
||||||
)
|
)
|
||||||
from qtpy.QtWidgets import QMessageBox
|
|
||||||
from qtpy.QtWidgets import QShortcut
|
|
||||||
from pyqtgraph.Qt import QtWidgets, uic, QtCore
|
|
||||||
|
|
||||||
from bec_lib import MessageEndpoints, messages
|
|
||||||
from bec_widgets.utils import DoubleValidationDelegate
|
from bec_widgets.utils import DoubleValidationDelegate
|
||||||
|
|
||||||
|
|
||||||
# TODO - General features
|
# TODO - General features
|
||||||
# - put motor status (moving, stopped, etc)
|
# - put motor status (moving, stopped, etc)
|
||||||
# - add mouse interactions with the plot -> click to select coordinates, double click to move?
|
# - add mouse interactions with the plot -> click to select coordinates, double click to move?
|
||||||
@ -1306,9 +1305,9 @@ class MotorControl(QThread):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
import yaml
|
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
|
import yaml
|
||||||
from bec_lib import BECClient, ServiceConfig
|
from bec_lib import BECClient, ServiceConfig
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description="Motor App")
|
parser = argparse.ArgumentParser(description="Motor App")
|
||||||
|
@ -5,14 +5,15 @@ import time
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import pyqtgraph
|
import pyqtgraph
|
||||||
import pyqtgraph as pg
|
import pyqtgraph as pg
|
||||||
from bec_lib import messages, MessageEndpoints
|
from bec_lib import MessageEndpoints, messages
|
||||||
from bec_lib.redis_connector import RedisConnector
|
from bec_lib.redis_connector import RedisConnector
|
||||||
from qtpy.QtCore import Slot as pyqtSlot
|
|
||||||
from qtpy.QtWidgets import QTableWidgetItem
|
|
||||||
from pyqtgraph import mkBrush, mkPen
|
from pyqtgraph import mkBrush, mkPen
|
||||||
from pyqtgraph.Qt import QtCore, QtWidgets, uic
|
from pyqtgraph.Qt import QtCore, QtWidgets, uic
|
||||||
from pyqtgraph.Qt.QtCore import pyqtSignal
|
from pyqtgraph.Qt.QtCore import pyqtSignal
|
||||||
from bec_widgets.utils import Crosshair, Colors
|
from qtpy.QtCore import Slot as pyqtSlot
|
||||||
|
from qtpy.QtWidgets import QTableWidgetItem
|
||||||
|
|
||||||
|
from bec_widgets.utils import Colors, Crosshair
|
||||||
from bec_widgets.utils.bec_dispatcher import BECDispatcher
|
from bec_widgets.utils.bec_dispatcher import BECDispatcher
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
from .crosshair import Crosshair
|
|
||||||
from .colors import Colors
|
|
||||||
from .validator_delegate import DoubleValidationDelegate
|
|
||||||
from .bec_table import BECTable
|
|
||||||
from .bec_connector import BECConnector, ConnectionConfig
|
from .bec_connector import BECConnector, ConnectionConfig
|
||||||
from .bec_dispatcher import BECDispatcher
|
from .bec_dispatcher import BECDispatcher
|
||||||
from .rpc_decorator import rpc_public, register_rpc_methods
|
from .bec_table import BECTable
|
||||||
|
from .colors import Colors
|
||||||
|
from .crosshair import Crosshair
|
||||||
from .entry_validator import EntryValidator
|
from .entry_validator import EntryValidator
|
||||||
|
from .rpc_decorator import register_rpc_methods, rpc_public
|
||||||
|
from .validator_delegate import DoubleValidationDelegate
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import time
|
import time
|
||||||
from typing import Type, Optional
|
from typing import Optional, Type
|
||||||
|
|
||||||
from pydantic import BaseModel, Field, field_validator
|
from pydantic import BaseModel, Field, field_validator
|
||||||
from qtpy.QtCore import Slot as pyqtSlot
|
from qtpy.QtCore import Slot as pyqtSlot
|
||||||
|
@ -8,11 +8,10 @@ from typing import Union
|
|||||||
|
|
||||||
import redis
|
import redis
|
||||||
from bec_lib import BECClient, ServiceConfig
|
from bec_lib import BECClient, ServiceConfig
|
||||||
|
from bec_lib.endpoints import EndpointInfo
|
||||||
from qtpy.QtCore import QObject
|
from qtpy.QtCore import QObject
|
||||||
from qtpy.QtCore import Signal as pyqtSignal
|
from qtpy.QtCore import Signal as pyqtSignal
|
||||||
|
|
||||||
from bec_lib.endpoints import EndpointInfo
|
|
||||||
|
|
||||||
# Adding a new pyqt signal requires a class factory, as they must be part of the class definition
|
# Adding a new pyqt signal requires a class factory, as they must be part of the class definition
|
||||||
# and cannot be dynamically added as class attributes after the class has been defined.
|
# and cannot be dynamically added as class attributes after the class has been defined.
|
||||||
_signal_class_factory = (
|
_signal_class_factory = (
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from qtpy.QtWidgets import QTableWidget
|
|
||||||
from qtpy.QtCore import Qt
|
from qtpy.QtCore import Qt
|
||||||
|
from qtpy.QtWidgets import QTableWidget
|
||||||
|
|
||||||
|
|
||||||
class BECTable(QTableWidget):
|
class BECTable(QTableWidget):
|
||||||
|
@ -2,7 +2,8 @@ import numpy as np
|
|||||||
import pyqtgraph as pg
|
import pyqtgraph as pg
|
||||||
|
|
||||||
# from qtpy.QtCore import QObject, pyqtSignal
|
# from qtpy.QtCore import QObject, pyqtSignal
|
||||||
from qtpy.QtCore import QObject, Signal as pyqtSignal
|
from qtpy.QtCore import QObject
|
||||||
|
from qtpy.QtCore import Signal as pyqtSignal
|
||||||
|
|
||||||
|
|
||||||
class Crosshair(QObject):
|
class Crosshair(QObject):
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# from qtpy.QtWidgets import QStyledItemDelegate, QLineEdit
|
# from qtpy.QtWidgets import QStyledItemDelegate, QLineEdit
|
||||||
|
|
||||||
from qtpy.QtGui import QDoubleValidator
|
from qtpy.QtGui import QDoubleValidator
|
||||||
from qtpy.QtWidgets import QStyledItemDelegate, QLineEdit
|
from qtpy.QtWidgets import QLineEdit, QStyledItemDelegate
|
||||||
|
|
||||||
|
|
||||||
class DoubleValidationDelegate(QStyledItemDelegate):
|
class DoubleValidationDelegate(QStyledItemDelegate):
|
||||||
|
@ -3,16 +3,16 @@ from abc import ABC, abstractmethod
|
|||||||
|
|
||||||
from qtpy.QtWidgets import (
|
from qtpy.QtWidgets import (
|
||||||
QApplication,
|
QApplication,
|
||||||
QWidget,
|
QCheckBox,
|
||||||
QLineEdit,
|
|
||||||
QComboBox,
|
QComboBox,
|
||||||
QTableWidget,
|
|
||||||
QSpinBox,
|
|
||||||
QDoubleSpinBox,
|
QDoubleSpinBox,
|
||||||
|
QLabel,
|
||||||
|
QLineEdit,
|
||||||
|
QSpinBox,
|
||||||
|
QTableWidget,
|
||||||
QTableWidgetItem,
|
QTableWidgetItem,
|
||||||
QVBoxLayout,
|
QVBoxLayout,
|
||||||
QCheckBox,
|
QWidget,
|
||||||
QLabel,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# pylint: disable=no-name-in-module
|
# pylint: disable=no-name-in-module
|
||||||
|
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
from qtpy.QtWidgets import QFileDialog
|
from qtpy.QtWidgets import QFileDialog
|
||||||
|
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
from .monitor import BECMonitor, ConfigDialog
|
|
||||||
from .motor_map import MotorMap
|
|
||||||
from .scan_control import ScanControl
|
|
||||||
from .toolbar import ModularToolBar
|
|
||||||
from .editor import BECEditor
|
from .editor import BECEditor
|
||||||
|
from .figure import BECFigure, FigureConfig
|
||||||
|
from .monitor import BECMonitor, ConfigDialog
|
||||||
from .monitor_scatter_2D import BECMonitor2DScatter
|
from .monitor_scatter_2D import BECMonitor2DScatter
|
||||||
from .motor_control import (
|
from .motor_control import (
|
||||||
MotorControlRelative,
|
|
||||||
MotorControlAbsolute,
|
MotorControlAbsolute,
|
||||||
|
MotorControlRelative,
|
||||||
MotorControlSelection,
|
MotorControlSelection,
|
||||||
MotorThread,
|
|
||||||
MotorCoordinateTable,
|
MotorCoordinateTable,
|
||||||
|
MotorThread,
|
||||||
)
|
)
|
||||||
from .figure import FigureConfig, BECFigure
|
from .motor_map import MotorMap
|
||||||
from .plots import BECWaveform1D, BECCurve, BECPlotBase
|
from .plots import BECCurve, BECPlotBase, BECWaveform1D
|
||||||
|
from .scan_control import ScanControl
|
||||||
|
from .toolbar import ModularToolBar
|
||||||
|
@ -3,23 +3,15 @@ import subprocess
|
|||||||
import qdarktheme
|
import qdarktheme
|
||||||
from jedi import Script
|
from jedi import Script
|
||||||
from jedi.api import Completion
|
from jedi.api import Completion
|
||||||
|
|
||||||
# pylint: disable=no-name-in-module
|
|
||||||
from qtpy.Qsci import QsciScintilla, QsciLexerPython, QsciAPIs
|
|
||||||
from qtpy.QtCore import Qt
|
|
||||||
from qtpy.QtCore import Signal, QThread
|
|
||||||
from qtpy.QtGui import QColor, QFont
|
|
||||||
from qtpy.QtWidgets import (
|
|
||||||
QApplication,
|
|
||||||
QFileDialog,
|
|
||||||
QTextEdit,
|
|
||||||
QVBoxLayout,
|
|
||||||
QWidget,
|
|
||||||
)
|
|
||||||
from qtpy.QtWidgets import QSplitter
|
|
||||||
from qtconsole.manager import QtKernelManager
|
from qtconsole.manager import QtKernelManager
|
||||||
from qtconsole.rich_jupyter_widget import RichJupyterWidget
|
from qtconsole.rich_jupyter_widget import RichJupyterWidget
|
||||||
|
|
||||||
|
# pylint: disable=no-name-in-module
|
||||||
|
from qtpy.Qsci import QsciAPIs, QsciLexerPython, QsciScintilla
|
||||||
|
from qtpy.QtCore import Qt, QThread, Signal
|
||||||
|
from qtpy.QtGui import QColor, QFont
|
||||||
|
from qtpy.QtWidgets import QApplication, QFileDialog, QSplitter, QTextEdit, QVBoxLayout, QWidget
|
||||||
|
|
||||||
from bec_widgets.widgets import ModularToolBar
|
from bec_widgets.widgets import ModularToolBar
|
||||||
|
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
from .figure import FigureConfig, BECFigure
|
from .figure import BECFigure, FigureConfig
|
||||||
|
@ -11,17 +11,16 @@ import pyqtgraph as pg
|
|||||||
import qdarktheme
|
import qdarktheme
|
||||||
from pydantic import Field
|
from pydantic import Field
|
||||||
from pyqtgraph.Qt import uic
|
from pyqtgraph.Qt import uic
|
||||||
from qtpy.QtWidgets import QApplication, QWidget
|
|
||||||
from qtpy.QtWidgets import QVBoxLayout, QMainWindow
|
|
||||||
from qtpy.QtCore import Signal as pyqtSignal
|
from qtpy.QtCore import Signal as pyqtSignal
|
||||||
|
from qtpy.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
|
||||||
|
|
||||||
from bec_widgets.utils import BECConnector, BECDispatcher, ConnectionConfig
|
from bec_widgets.utils import BECConnector, BECDispatcher, ConnectionConfig
|
||||||
from bec_widgets.widgets.plots import (
|
from bec_widgets.widgets.plots import (
|
||||||
|
BECImageShow,
|
||||||
BECPlotBase,
|
BECPlotBase,
|
||||||
BECWaveform1D,
|
BECWaveform1D,
|
||||||
Waveform1DConfig,
|
Waveform1DConfig,
|
||||||
WidgetConfig,
|
WidgetConfig,
|
||||||
BECImageShow,
|
|
||||||
)
|
)
|
||||||
from bec_widgets.widgets.plots.image import ImageConfig
|
from bec_widgets.widgets.plots.image import ImageConfig
|
||||||
|
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
from .monitor import BECMonitor
|
|
||||||
from .config_dialog import ConfigDialog
|
from .config_dialog import ConfigDialog
|
||||||
|
from .monitor import BECMonitor
|
||||||
|
@ -1,23 +1,22 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
|
from pydantic import ValidationError
|
||||||
from qtpy import uic
|
from qtpy import uic
|
||||||
from qtpy.QtCore import Signal as pyqtSignal
|
from qtpy.QtCore import Signal as pyqtSignal
|
||||||
from qtpy.QtWidgets import (
|
from qtpy.QtWidgets import (
|
||||||
QApplication,
|
QApplication,
|
||||||
QWidget,
|
|
||||||
QVBoxLayout,
|
|
||||||
QTableWidget,
|
|
||||||
QTabWidget,
|
|
||||||
QTableWidgetItem,
|
|
||||||
QLineEdit,
|
QLineEdit,
|
||||||
|
QMessageBox,
|
||||||
|
QTableWidget,
|
||||||
|
QTableWidgetItem,
|
||||||
|
QTabWidget,
|
||||||
|
QVBoxLayout,
|
||||||
|
QWidget,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from bec_widgets.utils.bec_dispatcher import BECDispatcher
|
||||||
from bec_widgets.utils.yaml_dialog import load_yaml, save_yaml
|
from bec_widgets.utils.yaml_dialog import load_yaml, save_yaml
|
||||||
from bec_widgets.validation import MonitorConfigValidator
|
from bec_widgets.validation import MonitorConfigValidator
|
||||||
from pydantic import ValidationError
|
|
||||||
from qtpy.QtWidgets import QApplication, QMessageBox
|
|
||||||
from bec_widgets.utils.bec_dispatcher import BECDispatcher
|
|
||||||
|
|
||||||
|
|
||||||
current_path = os.path.dirname(__file__)
|
current_path = os.path.dirname(__file__)
|
||||||
Ui_Form, BaseClass = uic.loadUiType(os.path.join(current_path, "config_dialog.ui"))
|
Ui_Form, BaseClass = uic.loadUiType(os.path.join(current_path, "config_dialog.ui"))
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from .motor_control import (
|
from .motor_control import (
|
||||||
MotorControlRelative,
|
|
||||||
MotorControlAbsolute,
|
MotorControlAbsolute,
|
||||||
|
MotorControlRelative,
|
||||||
MotorControlSelection,
|
MotorControlSelection,
|
||||||
MotorThread,
|
|
||||||
MotorCoordinateTable,
|
MotorCoordinateTable,
|
||||||
|
MotorThread,
|
||||||
)
|
)
|
||||||
|
@ -2,25 +2,26 @@
|
|||||||
import os
|
import os
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
|
||||||
from qtpy import uic
|
|
||||||
from qtpy.QtCore import QThread, Slot as pyqtSlot
|
|
||||||
from qtpy.QtCore import Signal as pyqtSignal, Qt
|
|
||||||
from qtpy.QtGui import QKeySequence, QDoubleValidator
|
|
||||||
from qtpy.QtWidgets import QMessageBox
|
|
||||||
from qtpy.QtWidgets import (
|
|
||||||
QComboBox,
|
|
||||||
QWidget,
|
|
||||||
QDoubleSpinBox,
|
|
||||||
QShortcut,
|
|
||||||
QTableWidget,
|
|
||||||
QPushButton,
|
|
||||||
QTableWidgetItem,
|
|
||||||
QCheckBox,
|
|
||||||
QLineEdit,
|
|
||||||
)
|
|
||||||
|
|
||||||
from bec_lib.alarm_handler import AlarmBase
|
from bec_lib.alarm_handler import AlarmBase
|
||||||
from bec_lib.device import Positioner
|
from bec_lib.device import Positioner
|
||||||
|
from qtpy import uic
|
||||||
|
from qtpy.QtCore import Qt, QThread
|
||||||
|
from qtpy.QtCore import Signal as pyqtSignal
|
||||||
|
from qtpy.QtCore import Slot as pyqtSlot
|
||||||
|
from qtpy.QtGui import QDoubleValidator, QKeySequence
|
||||||
|
from qtpy.QtWidgets import (
|
||||||
|
QCheckBox,
|
||||||
|
QComboBox,
|
||||||
|
QDoubleSpinBox,
|
||||||
|
QLineEdit,
|
||||||
|
QMessageBox,
|
||||||
|
QPushButton,
|
||||||
|
QShortcut,
|
||||||
|
QTableWidget,
|
||||||
|
QTableWidgetItem,
|
||||||
|
QWidget,
|
||||||
|
)
|
||||||
|
|
||||||
from bec_widgets.utils.bec_dispatcher import BECDispatcher
|
from bec_widgets.utils.bec_dispatcher import BECDispatcher
|
||||||
|
|
||||||
CONFIG_DEFAULT = {
|
CONFIG_DEFAULT = {
|
||||||
|
@ -7,14 +7,13 @@ from typing import Any, Union
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import pyqtgraph as pg
|
import pyqtgraph as pg
|
||||||
from bec_lib import MessageEndpoints
|
from bec_lib import MessageEndpoints
|
||||||
from qtpy import QtCore
|
from qtpy import QtCore, QtGui
|
||||||
from qtpy import QtGui
|
|
||||||
from qtpy.QtCore import Signal as pyqtSignal
|
from qtpy.QtCore import Signal as pyqtSignal
|
||||||
from qtpy.QtCore import Slot as pyqtSlot
|
from qtpy.QtCore import Slot as pyqtSlot
|
||||||
from qtpy.QtWidgets import QApplication
|
from qtpy.QtWidgets import QApplication
|
||||||
|
|
||||||
from bec_widgets.utils.yaml_dialog import load_yaml
|
|
||||||
from bec_widgets.utils.bec_dispatcher import BECDispatcher
|
from bec_widgets.utils.bec_dispatcher import BECDispatcher
|
||||||
|
from bec_widgets.utils.yaml_dialog import load_yaml
|
||||||
|
|
||||||
CONFIG_DEFAULT = {
|
CONFIG_DEFAULT = {
|
||||||
"plot_settings": {
|
"plot_settings": {
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
from .plot_base import AxisConfig, WidgetConfig, BECPlotBase
|
from .image import BECImageItem, BECImageShow, ImageItemConfig
|
||||||
from .waveform1d import Waveform1DConfig, BECWaveform1D, BECCurve
|
from .plot_base import AxisConfig, BECPlotBase, WidgetConfig
|
||||||
from .image import BECImageShow, ImageItemConfig, BECImageItem
|
from .waveform1d import BECCurve, BECWaveform1D, Waveform1DConfig
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from typing import Literal, Optional, Any
|
from typing import Any, Literal, Optional
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pyqtgraph as pg
|
import pyqtgraph as pg
|
||||||
from pydantic import Field, BaseModel, ValidationError
|
from bec_lib import MessageEndpoints
|
||||||
from qtpy.QtCore import QThread, QObject
|
from pydantic import BaseModel, Field, ValidationError
|
||||||
|
from qtpy.QtCore import QObject, QThread
|
||||||
from qtpy.QtCore import Signal as pyqtSignal
|
from qtpy.QtCore import Signal as pyqtSignal
|
||||||
from qtpy.QtCore import Slot as pyqtSlot
|
from qtpy.QtCore import Slot as pyqtSlot
|
||||||
from qtpy.QtWidgets import QWidget
|
from qtpy.QtWidgets import QWidget
|
||||||
|
|
||||||
from bec_lib import MessageEndpoints
|
from bec_widgets.utils import BECConnector, ConnectionConfig
|
||||||
from bec_widgets.utils import ConnectionConfig, BECConnector
|
|
||||||
from bec_widgets.widgets.plots import BECPlotBase, WidgetConfig
|
from bec_widgets.widgets.plots import BECPlotBase, WidgetConfig
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,7 +4,6 @@ from typing import Literal, Optional
|
|||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pyqtgraph as pg
|
import pyqtgraph as pg
|
||||||
|
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
from qtpy.QtWidgets import QWidget
|
from qtpy.QtWidgets import QWidget
|
||||||
|
|
||||||
|
@ -1,28 +1,28 @@
|
|||||||
import msgpack
|
import msgpack
|
||||||
|
from bec_lib import MessageEndpoints
|
||||||
from qtpy.QtWidgets import (
|
from qtpy.QtWidgets import (
|
||||||
QApplication,
|
QApplication,
|
||||||
QWidget,
|
|
||||||
QComboBox,
|
|
||||||
QPushButton,
|
|
||||||
QVBoxLayout,
|
|
||||||
QGroupBox,
|
|
||||||
QLabel,
|
|
||||||
QLineEdit,
|
|
||||||
QDoubleSpinBox,
|
|
||||||
QSpinBox,
|
|
||||||
QCheckBox,
|
QCheckBox,
|
||||||
|
QComboBox,
|
||||||
|
QDoubleSpinBox,
|
||||||
QFrame,
|
QFrame,
|
||||||
QHBoxLayout,
|
|
||||||
QLayout,
|
|
||||||
QGridLayout,
|
QGridLayout,
|
||||||
|
QGroupBox,
|
||||||
|
QHBoxLayout,
|
||||||
|
QHeaderView,
|
||||||
|
QLabel,
|
||||||
|
QLayout,
|
||||||
|
QLineEdit,
|
||||||
|
QPushButton,
|
||||||
|
QSpinBox,
|
||||||
QTableWidget,
|
QTableWidget,
|
||||||
QTableWidgetItem,
|
QTableWidgetItem,
|
||||||
QHeaderView,
|
QVBoxLayout,
|
||||||
|
QWidget,
|
||||||
)
|
)
|
||||||
|
|
||||||
from bec_lib import MessageEndpoints
|
|
||||||
from bec_widgets.utils.widget_io import WidgetIO
|
|
||||||
from bec_widgets.utils.bec_dispatcher import BECDispatcher
|
from bec_widgets.utils.bec_dispatcher import BECDispatcher
|
||||||
|
from bec_widgets.utils.widget_io import WidgetIO
|
||||||
|
|
||||||
|
|
||||||
class ScanArgType:
|
class ScanArgType:
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
|
|
||||||
# pylint: disable=no-name-in-module
|
# pylint: disable=no-name-in-module
|
||||||
from qtpy.QtCore import QSize
|
from qtpy.QtCore import QSize, QTimer
|
||||||
from qtpy.QtWidgets import QToolBar, QStyle, QApplication
|
|
||||||
from qtpy.QtCore import QTimer
|
|
||||||
from qtpy.QtGui import QAction
|
from qtpy.QtGui import QAction
|
||||||
from qtpy.QtWidgets import QWidget
|
from qtpy.QtWidgets import QApplication, QStyle, QToolBar, QWidget
|
||||||
|
|
||||||
|
|
||||||
class ToolBarAction(ABC):
|
class ToolBarAction(ABC):
|
||||||
|
3
setup.py
3
setup.py
@ -1,5 +1,5 @@
|
|||||||
# pylint: disable= missing-module-docstring
|
# pylint: disable= missing-module-docstring
|
||||||
from setuptools import setup, find_packages
|
from setuptools import find_packages, setup
|
||||||
|
|
||||||
__version__ = "0.44.4"
|
__version__ = "0.44.4"
|
||||||
|
|
||||||
@ -40,6 +40,7 @@ if __name__ == "__main__":
|
|||||||
"coverage",
|
"coverage",
|
||||||
"pytest-qt",
|
"pytest-qt",
|
||||||
"black",
|
"black",
|
||||||
|
"isort",
|
||||||
],
|
],
|
||||||
"pyqt5": ["PyQt5>=5.9"],
|
"pyqt5": ["PyQt5>=5.9"],
|
||||||
"pyqt6": ["PyQt6>=6.0"],
|
"pyqt6": ["PyQt6>=6.0"],
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
# pylint: disable = no-name-in-module,missing-class-docstring, missing-module-docstring
|
# pylint: disable = no-name-in-module,missing-class-docstring, missing-module-docstring
|
||||||
|
|
||||||
import pytest
|
|
||||||
from unittest.mock import MagicMock
|
from unittest.mock import MagicMock
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
class FakeDevice:
|
class FakeDevice:
|
||||||
"""Fake minimal positioner class for testing."""
|
"""Fake minimal positioner class for testing."""
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import pytest
|
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
|
import pytest
|
||||||
from bec_lib.bec_service import BECService
|
from bec_lib.bec_service import BECService
|
||||||
|
|
||||||
from bec_widgets.utils import bec_dispatcher as bec_dispatcher_module
|
from bec_widgets.utils import bec_dispatcher as bec_dispatcher_module
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
# pylint: disable = no-name-in-module,missing-class-docstring, missing-module-docstring
|
# pylint: disable = no-name-in-module,missing-class-docstring, missing-module-docstring
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from .client_mocks import mocked_client
|
|
||||||
from bec_widgets.utils import BECConnector, ConnectionConfig
|
from bec_widgets.utils import BECConnector, ConnectionConfig
|
||||||
|
|
||||||
|
from .client_mocks import mocked_client
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def bec_connector(mocked_client):
|
def bec_connector(mocked_client):
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
# pylint: disable=missing-function-docstring, missing-module-docstring, unused-import
|
# pylint: disable=missing-function-docstring, missing-module-docstring, unused-import
|
||||||
import os
|
import os
|
||||||
|
from unittest.mock import MagicMock
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pytest
|
import pytest
|
||||||
from unittest.mock import MagicMock
|
|
||||||
|
from bec_widgets.widgets import BECFigure
|
||||||
|
|
||||||
from .client_mocks import mocked_client
|
from .client_mocks import mocked_client
|
||||||
from bec_widgets.widgets import BECFigure
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
@ -2,10 +2,9 @@
|
|||||||
import os
|
import os
|
||||||
from unittest.mock import MagicMock
|
from unittest.mock import MagicMock
|
||||||
|
|
||||||
import yaml
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from qtpy.QtWidgets import QTabWidget, QTableWidgetItem
|
import yaml
|
||||||
|
from qtpy.QtWidgets import QTableWidgetItem, QTabWidget
|
||||||
|
|
||||||
from bec_widgets.widgets import ConfigDialog
|
from bec_widgets.widgets import ConfigDialog
|
||||||
|
|
||||||
|
@ -2,13 +2,11 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import tempfile
|
import tempfile
|
||||||
from unittest.mock import MagicMock
|
from unittest.mock import MagicMock, mock_open, patch
|
||||||
from unittest.mock import patch, mock_open
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from qtpy.QtWidgets import QTextEdit
|
|
||||||
from qtpy.Qsci import QsciScintilla
|
from qtpy.Qsci import QsciScintilla
|
||||||
|
from qtpy.QtWidgets import QTextEdit
|
||||||
|
|
||||||
from bec_widgets.widgets.editor.editor import AutoCompleter, BECEditor
|
from bec_widgets.widgets.editor.editor import AutoCompleter, BECEditor
|
||||||
|
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
# pylint: disable = no-name-in-module,missing-class-docstring, missing-module-docstring
|
# pylint: disable = no-name-in-module,missing-class-docstring, missing-module-docstring
|
||||||
import json
|
import json
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pyqtgraph as pg
|
import pyqtgraph as pg
|
||||||
import pytest
|
import pytest
|
||||||
import zmq
|
import zmq
|
||||||
|
|
||||||
from bec_widgets.examples.eiger_plot.eiger_plot import EigerPlot
|
from bec_widgets.examples.eiger_plot.eiger_plot import EigerPlot
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import pytest
|
|
||||||
from bec_widgets.cli.generate_cli import ClientGenerator
|
|
||||||
from textwrap import dedent
|
from textwrap import dedent
|
||||||
|
|
||||||
import black
|
import black
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from bec_widgets.cli.generate_cli import ClientGenerator
|
||||||
|
|
||||||
|
|
||||||
# Mock classes to test the generator
|
# Mock classes to test the generator
|
||||||
|
@ -1,16 +1,9 @@
|
|||||||
# pylint: disable = no-name-in-module,missing-class-docstring, missing-module-docstring
|
# pylint: disable = no-name-in-module,missing-class-docstring, missing-module-docstring
|
||||||
from unittest.mock import patch
|
from unittest.mock import MagicMock, patch
|
||||||
from bec_lib.device import Positioner
|
|
||||||
import pytest
|
import pytest
|
||||||
from unittest.mock import MagicMock
|
from bec_lib.device import Positioner
|
||||||
|
|
||||||
from bec_widgets.widgets import (
|
|
||||||
MotorControlSelection,
|
|
||||||
MotorControlAbsolute,
|
|
||||||
MotorControlRelative,
|
|
||||||
MotorThread,
|
|
||||||
MotorCoordinateTable,
|
|
||||||
)
|
|
||||||
from bec_widgets.examples import (
|
from bec_widgets.examples import (
|
||||||
MotorControlApp,
|
MotorControlApp,
|
||||||
MotorControlMap,
|
MotorControlMap,
|
||||||
@ -18,9 +11,15 @@ from bec_widgets.examples import (
|
|||||||
MotorControlPanelAbsolute,
|
MotorControlPanelAbsolute,
|
||||||
MotorControlPanelRelative,
|
MotorControlPanelRelative,
|
||||||
)
|
)
|
||||||
|
from bec_widgets.widgets import (
|
||||||
|
MotorControlAbsolute,
|
||||||
|
MotorControlRelative,
|
||||||
|
MotorControlSelection,
|
||||||
|
MotorCoordinateTable,
|
||||||
|
MotorThread,
|
||||||
|
)
|
||||||
from bec_widgets.widgets.motor_control.motor_control import MotorActions
|
from bec_widgets.widgets.motor_control.motor_control import MotorActions
|
||||||
|
|
||||||
|
|
||||||
CONFIG_DEFAULT = {
|
CONFIG_DEFAULT = {
|
||||||
"motor_control": {
|
"motor_control": {
|
||||||
"motor_x": "samx",
|
"motor_x": "samx",
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
# pylint: disable = no-name-in-module,missing-module-docstring, missing-function-docstring
|
# pylint: disable = no-name-in-module,missing-module-docstring, missing-function-docstring
|
||||||
from unittest.mock import MagicMock
|
from unittest.mock import MagicMock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from bec_widgets.widgets import MotorMap
|
from bec_widgets.widgets import MotorMap
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
# pylint: disable=missing-function-docstring, missing-module-docstring, unused-import
|
# pylint: disable=missing-function-docstring, missing-module-docstring, unused-import
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from .client_mocks import mocked_client
|
from .client_mocks import mocked_client
|
||||||
from .test_bec_figure import bec_figure
|
from .test_bec_figure import bec_figure
|
||||||
|
|
||||||
|
@ -6,8 +6,8 @@ from unittest.mock import MagicMock
|
|||||||
import pytest
|
import pytest
|
||||||
from qtpy.QtWidgets import QLineEdit
|
from qtpy.QtWidgets import QLineEdit
|
||||||
|
|
||||||
from bec_widgets.widgets import ScanControl
|
|
||||||
from bec_widgets.utils.widget_io import WidgetIO
|
from bec_widgets.utils.widget_io import WidgetIO
|
||||||
|
from bec_widgets.widgets import ScanControl
|
||||||
|
|
||||||
from .test_msgs.available_scans_message import available_scans_message
|
from .test_msgs.available_scans_message import available_scans_message
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
# pylint: disable = no-name-in-module,missing-class-docstring, missing-module-docstring
|
# pylint: disable = no-name-in-module,missing-class-docstring, missing-module-docstring
|
||||||
|
import threading
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pytest
|
import pytest
|
||||||
from bec_lib import messages, RedisConnector
|
from bec_lib import RedisConnector, messages
|
||||||
from pytestqt import qtbot
|
from pytestqt import qtbot
|
||||||
import threading
|
|
||||||
|
|
||||||
from bec_widgets.examples.stream_plot.stream_plot import StreamPlot
|
from bec_widgets.examples.stream_plot.stream_plot import StreamPlot
|
||||||
|
|
||||||
|
@ -1,13 +1,6 @@
|
|||||||
# pylint: disable = no-name-in-module,missing-class-docstring, missing-module-docstring
|
# pylint: disable = no-name-in-module,missing-class-docstring, missing-module-docstring
|
||||||
import pytest
|
import pytest
|
||||||
from qtpy.QtWidgets import (
|
from qtpy.QtWidgets import QComboBox, QLineEdit, QSpinBox, QTableWidget, QVBoxLayout, QWidget
|
||||||
QWidget,
|
|
||||||
QVBoxLayout,
|
|
||||||
QLineEdit,
|
|
||||||
QComboBox,
|
|
||||||
QTableWidget,
|
|
||||||
QSpinBox,
|
|
||||||
)
|
|
||||||
|
|
||||||
from bec_widgets.utils.widget_io import WidgetHierarchy
|
from bec_widgets.utils.widget_io import WidgetHierarchy
|
||||||
|
|
||||||
|
@ -2,9 +2,10 @@
|
|||||||
import os
|
import os
|
||||||
import tempfile
|
import tempfile
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import yaml
|
import yaml
|
||||||
from qtpy.QtWidgets import QWidget, QVBoxLayout, QPushButton
|
from qtpy.QtWidgets import QPushButton, QVBoxLayout, QWidget
|
||||||
|
|
||||||
from bec_widgets.utils.yaml_dialog import load_yaml, save_yaml
|
from bec_widgets.utils.yaml_dialog import load_yaml, save_yaml
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user