magicclass.widgets package

Subpackages

Submodules

magicclass.widgets.console module

Jupyter QtConsole widget with callback signals.

You can embed a console widget in a magic class.

from magicclass import magicclass
from magicclass.widgets import QtConsole

class Main:
    console = QtConsole()

ui = Main()
ui.show()

There are some additional methods that would be very useful for developing a Python script executable GUI.

# programmatically add code to console.
ui.console.value = "a = 1"

# callback when code is executed.
@console.executed.connect
def _():
    print("executed!")

# programmatically execute code.
ui.console.execute()
class magicclass.widgets.console.QtConsole(**kwargs)[source]

Bases: magicgui.widgets._bases.widget.Widget, magicgui.widgets._bases.mixins._OrientationMixin, MutableSequence[magicgui.widgets._bases.widget.Widget]

execute()[source]

Execute current code block

executed
property value: str

Get current code block

magicclass.widgets.listwidget module

ListWidget is a QListWidget wrapper class. This widget can contain any Python objects as list items.

from magicclass.widgets import ListWidget

listwidget = ListWidget()

# You can add any objects
listwidget.add_item("abc")
listwidget.add_item(np.arange(5))

You can dispatch double click callbacks depending on the type of contents.

@listwidget.register_callback(str)
def _(item, i):
    # This function will be called when the item "abc" is double-clicked.
    print(item)

@listwidget.register_callback(np.ndarray)
def _(item, i):
    # This function will be called when the item np.arange(5) is double-clicked.
    print(item.tolist())

In a similar way, you can dispatch display method and context menu.

@listwidget.register_delegate(np.ndarray)
def _(item):
    # This function should return how ndarray will be displayed.
    return f"Array with shape {item.shape}"

@listwidget.register_contextmenu(np.ndarray)
def Plot(item, i):
    '''Function documentation will be the tooltip.'''
    plt.plot(item)
    plt.show()
class magicclass.widgets.listwidget.ListWidget(dragdrop: bool = True, **kwargs)[source]

Bases: magicgui.widgets._bases.widget.Widget, magicgui.widgets._bases.mixins._OrientationMixin, MutableSequence[magicgui.widgets._bases.widget.Widget]

add_item(obj: Any)[source]

Append any item to the list.

clear()[source]

Clear all the items.

insert_item(i: int, obj: Any)[source]

Insert any item to the list.

property nitems: int
pop_item(i: int) Any[source]

Pop item at an index.

register_callback(type_: type)[source]

Register a double-click callback function for items of certain type.

register_contextmenu(type_: type)[source]

Register a custom context menu for items of certain type.

register_delegate(type_: type)[source]

Register a custom display.

property title: str
property value: list[typing.Any]
class magicclass.widgets.listwidget.PyListWidget(parent: None)[source]

Bases: PyQt5.QtWidgets.QListWidget

contextMenu(point)[source]
item(self, int) QListWidgetItem[source]
itemAt(self, QPoint) QListWidgetItem[source]
PyListWidget.itemAt(self, int, int) -> QListWidgetItem
setParentContainer(container: magicclass.widgets.listwidget.ListWidget) None[source]
class magicclass.widgets.listwidget.PyListWidgetItem(parent: Optional[PyQt5.QtWidgets.QListWidget] = None, obj=None, name=None)[source]

Bases: PyQt5.QtWidgets.QListWidgetItem

magicclass.widgets.listwidget.partial_event(f, *args)[source]

magicclass.widgets.misc module

class magicclass.widgets.misc.CheckButton(text: str | None = None, **kwargs)[source]

Bases: magicgui.widgets.PushButton

class magicclass.widgets.misc.ConsoleTextEdit(*args, **kwargs)[source]

Bases: magicgui.widgets.TextEdit

class magicclass.widgets.misc.Figure(nrows: int = 1, ncols: int = 1, figsize: tuple[int, int] = (4, 3), style=None, layout: str = 'vertical', **kwargs)[source]

Bases: magicgui.widgets._bases.widget.Widget, magicgui.widgets._bases.mixins._OrientationMixin, MutableSequence[magicgui.widgets._bases.widget.Widget]

A matplotlib figure canvas.

property ax
property axes
draw()[source]

magicclass.widgets.separator module

class magicclass.widgets.separator.Separator(orientation='horizontal', text: str = '', name: str = '', button: bool = False)[source]

Bases: magicgui.widgets._bases.widget.Widget, magicgui.widgets._bases.mixins._OrientationMixin, MutableSequence[magicgui.widgets._bases.widget.Widget]

btn_clicked
property btn_text

magicclass.widgets.sequence module

class magicclass.widgets.sequence.ListDataView(widget: magicclass.widgets.sequence.ListEdit)[source]

Bases: object

class magicclass.widgets.sequence.ListEdit(value: Iterable[magicclass.widgets.sequence._V] = UNSET, annotation: Optional[type] = None, layout: str = 'horizontal', options: Optional[dict] = None, **kwargs)[source]

Bases: magicgui.widgets._bases.widget.Widget, magicgui.widgets._bases.mixins._OrientationMixin, MutableSequence[magicgui.widgets._bases.widget.Widget]

append_new(value=UNSET)[source]
delete_last()[source]
property value
class magicclass.widgets.sequence.TupleEdit(value: Iterable[magicclass.widgets.sequence._V] = UNSET, annotation: Optional[type] = None, layout: str = 'horizontal', options: Optional[dict] = None, **kwargs)[source]

Bases: magicgui.widgets._bases.widget.Widget, magicgui.widgets._bases.mixins._OrientationMixin, MutableSequence[magicgui.widgets._bases.widget.Widget]

append_new(value=UNSET)[source]
property value

magicclass.widgets.utils module

class magicclass.widgets.utils.FrozenContainer(name: str = '', annotation: Any = None, label: str = None, tooltip: str | None = None, visible: bool | None = None, enabled: bool = True, gui_only=False, backend_kwargs={}, layout: str = 'vertical', widgets: Sequence[Widget] = (), labels=True)[source]

Bases: magicgui.widgets._bases.widget.Widget, magicgui.widgets._bases.mixins._OrientationMixin, MutableSequence[magicgui.widgets._bases.widget.Widget]

Non-editable container. This class is useful to add QWidget into Container. If a QWidget is added via Container.layout(), it will be invisible from Container. We can solve this problem by "wrapping" a QWidget with a Container.

insert(key, value)[source]

Insert widget at key.

set_widget(widget: PyQt5.QtWidgets.QWidget)[source]

Module contents

Advanced widgets for magic class GUI. These widgets are all compatible with the append method of Container widgets.

class magicclass.widgets.CheckButton(text: str | None = None, **kwargs)[source]

Bases: magicgui.widgets.PushButton

class magicclass.widgets.ConsoleTextEdit(*args, **kwargs)[source]

Bases: magicgui.widgets.TextEdit

class magicclass.widgets.Figure(nrows: int = 1, ncols: int = 1, figsize: tuple[int, int] = (4, 3), style=None, layout: str = 'vertical', **kwargs)[source]

Bases: magicgui.widgets._bases.widget.Widget, magicgui.widgets._bases.mixins._OrientationMixin, MutableSequence[magicgui.widgets._bases.widget.Widget]

A matplotlib figure canvas.

property ax
property axes
draw()[source]
class magicclass.widgets.FrozenContainer(name: str = '', annotation: Any = None, label: str = None, tooltip: str | None = None, visible: bool | None = None, enabled: bool = True, gui_only=False, backend_kwargs={}, layout: str = 'vertical', widgets: Sequence[Widget] = (), labels=True)[source]

Bases: magicgui.widgets._bases.widget.Widget, magicgui.widgets._bases.mixins._OrientationMixin, MutableSequence[magicgui.widgets._bases.widget.Widget]

Non-editable container. This class is useful to add QWidget into Container. If a QWidget is added via Container.layout(), it will be invisible from Container. We can solve this problem by "wrapping" a QWidget with a Container.

insert(key, value)[source]

Insert widget at key.

set_widget(widget: PyQt5.QtWidgets.QWidget)[source]
class magicclass.widgets.ListEdit(value: Iterable[magicclass.widgets.sequence._V] = UNSET, annotation: Optional[type] = None, layout: str = 'horizontal', options: Optional[dict] = None, **kwargs)[source]

Bases: magicgui.widgets._bases.widget.Widget, magicgui.widgets._bases.mixins._OrientationMixin, MutableSequence[magicgui.widgets._bases.widget.Widget]

append_new(value=UNSET)[source]
delete_last()[source]
property value
class magicclass.widgets.ListWidget(dragdrop: bool = True, **kwargs)[source]

Bases: magicgui.widgets._bases.widget.Widget, magicgui.widgets._bases.mixins._OrientationMixin, MutableSequence[magicgui.widgets._bases.widget.Widget]

add_item(obj: Any)[source]

Append any item to the list.

clear()[source]

Clear all the items.

insert_item(i: int, obj: Any)[source]

Insert any item to the list.

property nitems: int
pop_item(i: int) Any[source]

Pop item at an index.

register_callback(type_: type)[source]

Register a double-click callback function for items of certain type.

register_contextmenu(type_: type)[source]

Register a custom context menu for items of certain type.

register_delegate(type_: type)[source]

Register a custom display.

property title: str
property value: list[typing.Any]
class magicclass.widgets.QtConsole(**kwargs)[source]

Bases: magicgui.widgets._bases.widget.Widget, magicgui.widgets._bases.mixins._OrientationMixin, MutableSequence[magicgui.widgets._bases.widget.Widget]

execute()[source]

Execute current code block

executed
name: str
property value: str

Get current code block

class magicclass.widgets.QtImageCanvas(image: Optional[numpy.ndarray] = None, cmap=None, contrast_limits: Optional[tuple[float, float]] = None, **kwargs)[source]

Bases: magicgui.widgets._bases.widget.Widget, magicgui.widgets._bases.mixins._OrientationMixin, MutableSequence[magicgui.widgets._bases.widget.Widget]

property cmap

Color map

property contrast_limits: tuple[float, float]

Contrast limits of image

property image: numpy.ndarray

Image data

property interactive: bool

Mouse interactivity

show_button(visible: bool = True)[source]

Set visibility of ROI/Norm buttons.

Parameters

visible (bool) -- Visibility of ROI/Norm buttons

show_hist(visible: bool = True)[source]

Set visibility of intensity histogram.

Parameters

visible (bool) -- Visibility of histogram

property text_overlay: magicclass.widgets.qtgraph.graph_items.TextOverlay

Text overlay on the image.

property view_range: list[list[float, float]]

Range of image (edge coordinates of canvas)

class magicclass.widgets.QtPlotCanvas(region_visible=False, **kwargs)[source]

Bases: magicgui.widgets._bases.widget.Widget, magicgui.widgets._bases.mixins._OrientationMixin, MutableSequence[magicgui.widgets._bases.widget.Widget]

A 1-D data viewer that have similar API as napari Viewer.

property interactive: bool

Mouse interactivity

property region: tuple[float, float]

Get the limits of linear region.

region_changed
property region_visible: bool

Linear region visibility.

property xlabel

Label of X-axis.

property xlim

Range limits of X-axis.

property ylabel: str

Label of Y-axis.

property ylim

Range limits of Y-axis.

class magicclass.widgets.Separator(orientation='horizontal', text: str = '', name: str = '', button: bool = False)[source]

Bases: magicgui.widgets._bases.widget.Widget, magicgui.widgets._bases.mixins._OrientationMixin, MutableSequence[magicgui.widgets._bases.widget.Widget]

btn_clicked
property btn_text
name: str
class magicclass.widgets.TupleEdit(value: Iterable[magicclass.widgets.sequence._V] = UNSET, annotation: Optional[type] = None, layout: str = 'horizontal', options: Optional[dict] = None, **kwargs)[source]

Bases: magicgui.widgets._bases.widget.Widget, magicgui.widgets._bases.mixins._OrientationMixin, MutableSequence[magicgui.widgets._bases.widget.Widget]

append_new(value=UNSET)[source]
property value