ezinput

EZInput

PyPI Python Version Downloads Docs License Tests Coverage Contributors GitHub stars GitHub forks DOI

EZInput is a Python library that simplifies the creation of user interfaces both in the terminal and in Jupyter notebooks. It provides a convenient way to add various types of widgets, making it easier to interact with your code and visualize results.

DISCLAIMER: the project is currently in alpha stage and will likely suffer changes in the API and functionality.

Installation

To install EZInput, you can use pip:

pip install ezinput

Usage

EZInput provides a unified interface for creating UIs in either the terminal or Jupyter notebooks. The mode is automatically determined based on the environment.

Terminal Mode

To create a GUI in the terminal using prompt_toolkit:

from ezinput import EZInput

gui = EZInput(title="My Terminal GUI")

# Add GUI elements
gui.add_check("confirm", "Do you want to proceed?", remember_value=True)
gui.add_text("name", "Enter your name:", placeholder="John Doe", remember_value=True)
gui.add_int_range("age", "Enter your age:", 18, 100, remember_value=True)
gui.add_float_range("height", "Enter your height (in meters):", 1.0, 2.5, remember_value=True)
gui.add_dropdown("color", ["Red", "Blue", "Green"], "Choose your favorite color:", remember_value=True)
gui.add_path_completer("file_path", "Enter a file path:", remember_value=True)

# Save settings
gui.save_settings()

# Restore default settings
gui.restore_default_settings()

Jupyter Notebook Mode

To create a GUI in Jupyter notebooks using ipywidgets:

from ezinput import EZInput

gui = EZInput(title="My Jupyter GUI")

# Add GUI elements
gui.add_text("text", description="Enter some text:", placeholder="Hello, world!", remember_value=True)
gui.add_int_range("int_slider", description="Choose a number:", vmin=0, vmax=10, remember_value=True)
gui.add_float_range("float_slider", description="Choose a decimal:", vmin=0.0, vmax=1.0, remember_value=True)
gui.add_check("checkbox", description="Check this box:", remember_value=True)
gui.add_dropdown("dropdown", options=["Option 1", "Option 2", "Option 3"], description="Choose an option:", remember_value=True)
gui.add_file_upload("file_upload", accept=".txt", multiple=False)

# Display the GUI
gui.show()

# Save settings
gui.save_settings()

Unified API

EZInput provides a unified API for both terminal and Jupyter notebook modes. The following methods are available:

  • add_label(tag, label): Add a label to the GUI.
  • add_text(tag, description, placeholder="", remember_value=False): Add a text input field.
  • add_text_area(tag, description, placeholder="", remember_value=False): Add a multi-line text area.
  • add_int_range(tag, description, vmin, vmax, remember_value=False): Add an integer slider or range input.
  • add_float_range(tag, description, vmin, vmax, remember_value=False): Add a float slider or range input.
  • add_check(tag, description, remember_value=False): Add a yes/no or checkbox input.
  • add_dropdown(tag, options, description="", remember_value=False): Add a dropdown menu.
  • add_callback(tag, func, values, description="Run"): Add a function to be ran (if in jupyter, after the press of the generated button) that triggers a callback function.

Saving and Restoring Settings

EZInput allows you to save and restore widget values using configuration files:

# Save current settings
gui.save_settings()

# Restore default settings
gui.restore_default_settings()

Examples

Terminal Example

from ezinput import EZInput

gui = EZInput(title="Terminal Example")
gui.add_text("username", "Enter your username:", remember_value=True)
gui.add_int_range("age", "Enter your age:", 18, 100, remember_value=True)
gui.save_settings()

Jupyter Notebook Example

from ezinput import EZInput

gui = EZInput(title="Jupyter Example")
gui.add_text("username", description="Enter your username:", remember_value=True)
gui.add_int_range("age", description="Enter your age:", vmin=18, vmax=100, remember_value=True)
gui.show()

License

This project is licensed under the MIT License. See the LICENSE file for details.

1"""
2.. include:: ../../README.md
3"""
4
5from .ezinput_jupyter import EZInputJupyter
6from .ezinput_prompt import EZInputPrompt
7from .ezinput import EZInput