Metadata-Version: 2.1
Name: magicgui
Version: 0.7.2
Summary:  build GUIs from python types
Project-URL: homepage, https://github.com/pyapp-kit/magicgui
Project-URL: repository, https://github.com/pyapp-kit/magicgui
Project-URL: changelog, https://github.com/pyapp-kit/magicgui/blob/main/CHANGELOG.md
Project-URL: issues, https://github.com/pyapp-kit/magicgui/issues
Project-URL: documentation, https://pyapp-kit.github.io/magicgui/
Author: Talley Lambert
Author-email: talley.lambert@gmail.com
License: MIT
License-File: LICENSE
Keywords: gui,type annotations,widgets
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: X11 Applications :: Qt
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Desktop Environment
Classifier: Topic :: Software Development
Classifier: Topic :: Software Development :: User Interfaces
Classifier: Topic :: Software Development :: Widget Sets
Classifier: Topic :: Utilities
Requires-Python: >=3.8
Requires-Dist: docstring-parser>=0.7
Requires-Dist: psygnal>=0.5.0
Requires-Dist: qtpy>=1.7.0
Requires-Dist: superqt>=0.4.0
Requires-Dist: typing-extensions
Provides-Extra: dev
Requires-Dist: annotated-types; extra == 'dev'
Requires-Dist: attrs; extra == 'dev'
Requires-Dist: black; extra == 'dev'
Requires-Dist: ipython; extra == 'dev'
Requires-Dist: ipywidgets; extra == 'dev'
Requires-Dist: isort; extra == 'dev'
Requires-Dist: matplotlib; extra == 'dev'
Requires-Dist: mypy; extra == 'dev'
Requires-Dist: numpy; extra == 'dev'
Requires-Dist: pandas; extra == 'dev'
Requires-Dist: pdbpp; extra == 'dev'
Requires-Dist: pillow>=4.0; extra == 'dev'
Requires-Dist: pint>=0.13.0; extra == 'dev'
Requires-Dist: pre-commit; extra == 'dev'
Requires-Dist: pydantic; extra == 'dev'
Requires-Dist: pydocstyle; extra == 'dev'
Requires-Dist: pyqt5>=5.12.0; extra == 'dev'
Requires-Dist: pytest; extra == 'dev'
Requires-Dist: pytest-cov; extra == 'dev'
Requires-Dist: pytest-mypy-plugins; extra == 'dev'
Requires-Dist: pytest-qt; extra == 'dev'
Requires-Dist: rich; extra == 'dev'
Requires-Dist: ruff; extra == 'dev'
Requires-Dist: toolz; extra == 'dev'
Requires-Dist: tqdm>=4.30.0; extra == 'dev'
Provides-Extra: docs
Requires-Dist: ipywidgets>=8.0.0; extra == 'docs'
Requires-Dist: mkdocs; extra == 'docs'
Requires-Dist: mkdocs-gen-files; extra == 'docs'
Requires-Dist: mkdocs-literate-nav; extra == 'docs'
Requires-Dist: mkdocs-material; extra == 'docs'
Requires-Dist: mkdocs-spellcheck[all]; extra == 'docs'
Requires-Dist: mkdocstrings-python; extra == 'docs'
Requires-Dist: pint; extra == 'docs'
Requires-Dist: pyside6; extra == 'docs'
Provides-Extra: image
Requires-Dist: pillow>=4.0; extra == 'image'
Provides-Extra: jupyter
Requires-Dist: ipywidgets>=8.0.0; extra == 'jupyter'
Provides-Extra: min-req
Requires-Dist: docstring-parser==0.7; extra == 'min-req'
Requires-Dist: psygnal==0.5.0; extra == 'min-req'
Requires-Dist: qtpy==1.7.0; extra == 'min-req'
Requires-Dist: superqt==0.4.0; extra == 'min-req'
Requires-Dist: typing-extensions; extra == 'min-req'
Provides-Extra: pyqt5
Requires-Dist: pyqt5>=5.12.0; extra == 'pyqt5'
Provides-Extra: pyqt6
Requires-Dist: pyqt6; extra == 'pyqt6'
Provides-Extra: pyside2
Requires-Dist: pyside2>=5.14; python_version == '3.8' and extra == 'pyside2'
Requires-Dist: pyside2>=5.15; python_version >= '3.9' and extra == 'pyside2'
Provides-Extra: pyside6
Requires-Dist: pyside6; extra == 'pyside6'
Provides-Extra: quantity
Requires-Dist: pint>=0.13.0; extra == 'quantity'
Provides-Extra: testing
Requires-Dist: annotated-types; extra == 'testing'
Requires-Dist: attrs; extra == 'testing'
Requires-Dist: ipywidgets; extra == 'testing'
Requires-Dist: matplotlib; extra == 'testing'
Requires-Dist: numpy; extra == 'testing'
Requires-Dist: pandas; extra == 'testing'
Requires-Dist: pillow>=4.0; extra == 'testing'
Requires-Dist: pint>=0.13.0; extra == 'testing'
Requires-Dist: pydantic; extra == 'testing'
Requires-Dist: pytest; extra == 'testing'
Requires-Dist: pytest-cov; extra == 'testing'
Requires-Dist: pytest-mypy-plugins; extra == 'testing'
Requires-Dist: pytest-qt; extra == 'testing'
Requires-Dist: toolz; extra == 'testing'
Requires-Dist: tqdm>=4.30.0; extra == 'testing'
Provides-Extra: tqdm
Requires-Dist: tqdm>=4.30.0; extra == 'tqdm'
Description-Content-Type: text/markdown

<h1 align="center">
    <img src="https://raw.githubusercontent.com/pyapp-kit/magicgui/main/resources/logo_long.png" alt="magicgui" />
</h1>

<p align="center">
  <a href="https://github.com/pyapp-kit/magicgui/blob/main/LICENSE">
    <img src="https://img.shields.io/github/license/pyapp-kit/magicgui" alt="magicgui is released under the MIT license." />
  </a>
  <a href="https://pypi.python.org/pypi/magicgui">
    <img src="https://img.shields.io/pypi/v/magicgui.svg" alt="magicgui on PyPI" />
  </a>
  <a href="https://anaconda.org/conda-forge/magicgui">
    <img src="https://img.shields.io/conda/vn/conda-forge/magicgui" alt="magicgui on conda-forge" />
  </a>
  </p>
  <p align="center">
  <a href="https://github.com/pyapp-kit/magicgui/actions/workflows/test_and_deploy.yml">
    <img src="https://github.com/pyapp-kit/magicgui/actions/workflows/test_and_deploy.yml/badge.svg" alt="magicgui build status" />
  </a>
  <a href="https://codecov.io/gh/pyapp-kit/magicgui">
    <img src="https://codecov.io/gh/pyapp-kit/magicgui/branch/main/graph/badge.svg" alt="magicgui code coverage" />
  </a>
  <a href="https://zenodo.org/badge/latestdoi/238805437">
    <img src="https://zenodo.org/badge/238805437.svg" alt="cite magicgui" />
  </a>
</p>

<p align="center">
 <em>build GUIs from type annotations, using magic.</em>
</p>


## 📖 Docs

[https://pyapp-kit.github.io/magicgui/](https://pyapp-kit.github.io/magicgui/)

## Installation

`magicgui` uses `qtpy` to support both `pyside2` and `pyqt5` backends.  However, you
must have one of those installed for magicgui to work.

install with pip

```bash
pip install magicgui[pyqt5]
# or
pip install magicgui[pyside2]
```

or with conda:

```bash
conda install -c conda-forge magicgui pyqt  # or pyside2 instead of pyqt
```

> :information_source: If you'd like to help us extend support to a different backend,
> please open an [issue](https://github.com/pyapp-kit/magicgui/issues).

## Basic usage

```python
from magicgui import magicgui
from enum import Enum

class Medium(Enum):
    Glass = 1.520
    Oil = 1.515
    Water = 1.333
    Air = 1.0003

# decorate your function with the @magicgui decorator
@magicgui(call_button="calculate", result_widget=True)
def snells_law(aoi=30.0, n1=Medium.Glass, n2=Medium.Water, degrees=True):
    import math

    aoi = math.radians(aoi) if degrees else aoi
    try:
        result = math.asin(n1.value * math.sin(aoi) / n2.value)
        return math.degrees(result) if degrees else result
    except ValueError:
        return "Total internal reflection!"

# your function is now capable of showing a GUI
snells_law.show(run=True)
```

![snells](https://raw.githubusercontent.com/pyapp-kit/magicgui/main/resources/snells.png)

But that's just the beginning!  Please see [Documentation](https://pyapp-kit.github.io/magicgui/) for many more details
and usage examples.

## Contributing

Contributions are welcome!

See contributing guide [here](https://github.com/pyapp-kit/magicgui/blob/main/docs/CONTRIBUTING.md).
