Source code for magicclass.widgets.utils
from __future__ import annotations
from functools import wraps
from qtpy.QtWidgets import QWidget, QVBoxLayout, QGridLayout, QHBoxLayout
from magicgui.widgets import Widget
from magicgui.backends._qtpy.widgets import QBaseWidget
[docs]class FreeWidget(Widget):
"""
A Widget class with any QWidget as a child.
"""
def __init__(self, layout="vertical", **kwargs):
super().__init__(widget_type=QBaseWidget, backend_kwargs={"qwidg": QWidget}, **kwargs)
self.native: QWidget
self.central_widget: QWidget
if layout == "vertical":
self.native.setLayout(QVBoxLayout())
elif layout == "horizontal":
self.native.setLayout(QHBoxLayout())
elif layout == "grid":
self.native.setLayout(QGridLayout())
else:
ValueError(layout)
self.native.setContentsMargins(0, 0, 0, 0)
[docs] def set_widget(self, widget: QWidget, *args):
self.native.layout().addWidget(widget, *args)
widget.setParent(self.native)
self.central_widget = widget
[docs]def magicwidget(qcls: type[QWidget]):
@wraps(qcls.__init__)
def __init__(self: FreeWidget, *args, **kwargs):
FreeWidget.__init__(self)
self._qwidget = qcls.__init__(*args, **kwargs)
self.set_widget(self._qwidget)
new_class = type(qcls.__name__, (FreeWidget,), {})
new_class.__init__ = __init__
return new_class