Generate multifunctional GUIs from classes
Project description
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.
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
File details
Details for the file magic_class-0.7.14.tar.gz
.
File metadata
- Download URL: magic_class-0.7.14.tar.gz
- Upload date:
- Size: 208.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.27.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5bc662663aa56114d25c6576391c1cea7f93ba067db49c610bb55eb8bd35cbfa |
|
MD5 | ff6c5b736d45d627fa2a9f846d1f0b27 |
|
BLAKE2b-256 | 17835ec7a12ed9f602baaffa62e14a4e05b068860eab696f0fde4864421457aa |
File details
Details for the file magic_class-0.7.14-py3-none-any.whl
.
File metadata
- Download URL: magic_class-0.7.14-py3-none-any.whl
- Upload date:
- Size: 273.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.27.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a637598ecce77228eba7d8fd568c5c309b910a9f4b299896bd178021a1a0719d |
|
MD5 | 5c4e045d46acb68e5348dba7d8bc5f48 |
|
BLAKE2b-256 | 46fd55d410330cf93b3052d38fc304c0f3b13fe8dea3fa836be40a4ec6050d25 |