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: magicclass.widgets.utils.FreeWidget

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: magicclass.widgets.utils.FreeWidget, collections.abc.MutableSequence

append(obj: Any)[source]

Append any item to the list.

clear()[source]

Clear all the items.

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

Insert any item to the list.

pop(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

A checkable button.

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

Bases: magicgui.widgets.TextEdit

A text edit with console-like setting.

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

Bases: magicclass.widgets.utils.FreeWidget

A matplotlib figure canvas.

property ax
property axes
draw()[source]
class magicclass.widgets.misc.MacroEdit(*args, **kwargs)[source]

Bases: magicclass.widgets.utils.FreeWidget

A text edit embeded with a custom menu bar.

property value
class magicclass.widgets.misc.MessageBoxMode(value)[source]

Bases: enum.Enum

An enumeration.

ABOUT = 'about'
ERROR = 'error'
INFO = 'info'
QUESTION = 'question'
WARNING = 'warn'
magicclass.widgets.misc.show_messagebox(mode: str | MessageBoxMode = MessageBoxMode.INFO, title: str = None, text: str = None, parent=None) bool[source]

magicclass.widgets.separator module

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

Bases: magicclass.widgets.utils.FreeWidget

A Separator widget that can be used in both widgets and menus.

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.threading module

class magicclass.widgets.threading.ProgressWidget(text: Optional[str] = None, visible: bool = False)[source]

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

range(n: int)[source]
run(infinite: bool = True)[source]
show_progress(f: Optional[Callable] = None)[source]
property text: str
property value: int
class magicclass.widgets.threading.progress(function: Optional[Callable] = None, *, infinite: bool = True, progress: Optional[magicclass.widgets.threading.ProgressWidget] = None)[source]

Bases: object

property function

magicclass.widgets.utils module

class magicclass.widgets.utils.FreeWidget(**kwargs)[source]

Bases: magicgui.widgets._bases.widget.Widget

A Widget class with any QWidget as a child.

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

A checkable button.

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

Bases: magicgui.widgets.TextEdit

A text edit with console-like setting.

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

Bases: magicclass.widgets.utils.FreeWidget

A matplotlib figure canvas.

property ax
property axes
draw()[source]
class magicclass.widgets.FreeWidget(**kwargs)[source]

Bases: magicgui.widgets._bases.widget.Widget

A Widget class with any QWidget as a child.

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: magicclass.widgets.utils.FreeWidget, collections.abc.MutableSequence

append(obj: Any)[source]

Append any item to the list.

clear()[source]

Clear all the items.

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

Insert any item to the list.

pop(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.MacroEdit(*args, **kwargs)[source]

Bases: magicclass.widgets.utils.FreeWidget

A text edit embeded with a custom menu bar.

property value
class magicclass.widgets.ProgressWidget(text: Optional[str] = None, visible: bool = False)[source]

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

range(n: int)[source]
run(infinite: bool = True)[source]
show_progress(f: Optional[Callable] = None)[source]
property text: str
property value: int
class magicclass.widgets.QtConsole(**kwargs)[source]

Bases: magicclass.widgets.utils.FreeWidget

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, show_hist: bool = True, show_button: bool = True, **kwargs)[source]

Bases: magicclass.widgets.utils.FreeWidget, magicclass.widgets.qtgraph.qt_graph.HasPlotItem

property cmap

Color map

property contrast_limits: tuple[float, float]

Contrast limits of image

property image: np.ndarray | None

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: magicclass.widgets.utils.FreeWidget, magicclass.widgets.qtgraph.qt_graph.HasPlotItem

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: str = 'horizontal', text: str = '', name: str = '', button: bool = False)[source]

Bases: magicclass.widgets.utils.FreeWidget

A Separator widget that can be used in both widgets and menus.

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
class magicclass.widgets.progress(function: Optional[Callable] = None, *, infinite: bool = True, progress: Optional[magicclass.widgets.threading.ProgressWidget] = None)[source]

Bases: object

property function
magicclass.widgets.show_messagebox(mode: str | MessageBoxMode = MessageBoxMode.INFO, title: str = None, text: str = None, parent=None) bool[source]