Generate multifunctional GUIs from classes
Project description
magic-class
In magicgui you can make simple GUIs from functions. However, we usually have to create GUIs that are composed of several buttons, and each button is connected with a class method. You may also want a menu bar on the top of the GUI, or sometimes magicgui
widgets docked in it.
Decorate your classes with @magicclass
and you can use the class both in GUI and from console. They are easy to maintain and minimize the time spent on debugging of GUI implementation.
Magic-class has built-in real-time macro recorder and website-like help widget creator. You can quickly make a reproducible and well-documented GUI without disturbing readability of Pythonic codes.
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
- from source
git clone https://github.com/hanjinliu/magic-class
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.
widget = PlotData(title="Title")
widget.show()
You can continue analysis in console.
widget.plot()
magic-class
is also compatible with napari. You can add them to viewers as dock widgets.
import napari
viewer = napari.Viewer()
viewer.window.add_dock_widget(widget)
After you pushed "load" → "plot" you can make an executable Python script like below.
print(widget.macro)
ui = PlotData(title='Title')
ui.load(path=r'...')
ui.plot()
To make nicer GUI, you can also nest magic-class
:
@magicclass
class PlotData:
@magicclass
class Menu: ...
add menus with @magicmenu
decorator:
@magicclass
class PlotData:
@magicmenu
class File: ...
@magicmenu
class Edit: ...
add context menu with @magiccontext
decorator:
@magicclass
class PlotData:
@magiccontext
class context: ...
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for magic_class-0.6.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dafc6cb7e5699069a9b4bdefdabf94b46e19bf4c9c484c6c49d0e657b5c42cfe |
|
MD5 | a791155efc4ac4761459f8ad12c2a149 |
|
BLAKE2b-256 | 74dca3d4880b27f399b6f1e170c74f4ae0a6c8c7df28d8633f9bc021ca6c7ba8 |