magic-class 0.7.21


pip install magic-class

  Latest version

Released: Mar 05, 2026

Project Links

Meta
Author: Hanjin Liu
Requires Python: >=3.9

Classifiers

Intended Audience
  • Developers

Operating System
  • OS Independent

Programming Language
  • Python
  • Python :: 3 :: Only
  • Python :: 3.9
  • Python :: 3.10
  • Python :: 3.11
  • Python :: 3.12
  • Python :: 3.13
  • Python :: 3.14

BSD 3-Clause License Python package index download statistics PyPI version PyPI - Python Version Conda version

magic-class

magic-class makes GUI development as easy as daily coding by converting well-typed Python class directly into GUI. It is powered by magicgui and has a smooth interface with napari. magic-class is also implemented with useful widgets such as matplotlib figure canvas, logger widget and color edit.

Target users

  • Researchers who already have their Python functions and classes and are planing to take a step forward to improve the interface using GUI, with minimum effort.
  • Non-professional programmers who don't want to spend time on debugging and maintaining GUI.
  • Users who are not satisfied with the low reproducibility of the most of the GUI.
  • People who are familiar with magicgui and interested in more sophisticated GUI using typing.

How magic-class solves your problems

  • Decorate your class with @magicclass and you are ready to use the class both in GUI and from console.
  • @magicclass implements macro-recorder in the class. You can easily create executable Python codes from the history of manual operations.
  • Your code looks almost "Pythonic". No need to be confused by messy class structure pecuilar to GUI development anymore.

magic-class is work in progress. Feel free to report issues, make suggestions and contribute!

Documentation

Documentation is available here.

Installation

  • use pip
pip install magic-class -U
pip install magic-class[pyqt5] -U  # with pyqt5 backend
  • get the latest version
pip install git+https://github.com/hanjinliu/magic-class.git

Example

Let's make a simple GUI that can load 1-D data and plot it.

from magicclass import magicclass
from pathlib import Path

@magicclass
class PlotData:
    """Load 1D data and plot it."""

    def load(self, path: Path):
        """
        Load file.

        Parameters
        ----------
        path : Path
            File path
        """
        self.data = np.loadtxt(str(path))

    def plot(self):
        """Plot data."""
        plt.plot(self.data)
        plt.show()

Classes decorated with @magicclass are converted to magicgui's Container widgets. GUI starts with show method.

ui = PlotData(title="Title")
ui.show()

You can continue analysis in console.

ui.plot()

For people doing image analysis, it can be added to a napari viewer as a dock widget.

import napari
viewer = napari.Viewer()
viewer.window.add_dock_widget(ui)

Executable Python code (so called "macro" in many GUI tools) is available in macro attribute.

print(ui.macro)  # print macro
ui.macro.widget.show()  # open a text editor widget with macro written in

To make nicer GUI, you can also nest magic-class:

@magicclass
class PlotData:
    @magicclass
    class Menu: ...

add a menubar with @magicmenu decorator:

@magicclass
class PlotData:
    @magicmenu
    class File: ...
    @magicmenu
    class Edit: ...

add context menu with @magiccontext decorator:

@magicclass
class PlotData:
    @magiccontext
    class contextmenu: ...
        def Copy(self): ...
        def Paste(self): ...

directly integrate magicgui and its widgets:

@magicclass
class PlotData:
    line = LineEdit()
    @magicgui
    def load(self, path: Path): ...

... and so on.

Other examples are in the "examples" folder.

Wheel compatibility matrix

Platform Python 3
any

Files in release

Extras:
Dependencies:
docstring-parser (>=0.15)
macro-kit (>=0.4.6)
magicgui (>=0.8.0)
psygnal (>=0.9.0)
qtpy (>=1.10.0)
superqt[iconify] (>=0.6.1)
typing-extensions (>=4.5.0)