Skip to main content

Easy form creation with ipywidgets in Jupyter

Project description

IpyFormKit

IpyFormKit is a Python library for creating dynamic, interactive forms using ipywidgets in Jupyter notebooks. It simplifies the process of building forms for data entry, configuration, or experimentation with minimal code.

Features

  • Dynamic Forms: Automatically generate forms from dictionaries with support for various input types (text, numbers, dropdowns, checkboxes, etc.).
  • Custom Widgets: Includes specialized widgets like FileAutocomplete for file selection and CollapsibleVBox for collapsible sections.
  • Validation and Logic: Add conditions to disable, hide, or validate fields dynamically based on user input.
  • Masonry Layout: Organize multiple forms in a responsive masonry-style layout.
  • Adaptive CSS Styling Seamless integration with Jupyter Notebook/Lab, Google Colab and VScode themes.
Jupyter Lab Light Example Jupyter Lab Dark Example VSCode Example Google Colab Example

Installation

pip install ipyformkit

For use in Google Colab one currently needs to downgrade ipywidgets as widgets are not displayed otherwise.

pip install ipyformkit
pip install "ipywidgets>=7,<8"

Example Usage

import ipyformkit as ifk

test = {'first name':'Zaphod',
        'last name':'Beeblebrox',
        ('age', 'gender'):(-200, ('two-headed', 'male', 'female', 'non-binary')),
        'height':2.05,
        'date of birth':'Unknown (he probably lied about it anyway)',
        ('Input 1', 'Input 2', 'Input 3', 'Input 4'):('president', 'of', 'the', 'galaxy'),
        ('street', 'house'):('Heart of Gold Spaceship', 1),
        'additional info':{'hobbies':'Kidnapping himself, avoiding responsibility, being outrageous',}
       }


mandatory = ['last name', 'age']
disable = {'last name': lambda d: d['first name'] == '',}
hide = {'house': lambda d: d['street'] == '',}
check = {'age': lambda d: d['age'] > 0,}
tooltips = {'first name':'What your mother calls you when you are in trouble.'}

form = ifk.Form(test, title='Test Form', mandatory=mandatory, disable=disable, hide=hide, check=check, tooltips=tooltips, max_width=400)
form.display()

Text input is converted into placeholders instead of values by default. One can set multiple values at once by supplying a dictionary to the .set_values() method. The dictionary keys should match the field names in the form. The values can be any type supported by ipywidgets.

form.set_values({'first name': 'Arthur', 'last name': 'Dent', 'age': 42})

Retrieve values:

values = form.get_values() # returns unchecked values
out = form.check_and_return_values() # return checked values and highlights missing mandatory inputs

Documentation

ifk.Form() is a class that creates a form using ipyipywidgets. It can be displayed using its .display() method. It takes a dictionary as input and generates the corresponding ipywidgets. The class also supports various features such as validation, conditional display, and custom styling. The arguments mandatory, disable, hide and check expect dictionaries with the affected field name as a key and a function as a value. The function takes the current form inputs as a dictionary and returns a boolean value. The function should return True if the field should be disabled, hidden or checked, and False otherwise. The .get_values() method returns the current values of each input field without applying any validation. The .check_and_return_values() method will return the current values but validate that all checks are passed.

Dictionary Value Type Created Widget Notes
bool ipywidgets.Checkbox A checkbox with the dictionary key as its description.
int ipywidgets.IntText A text box for integer input.
float ipywidgets.FloatText A text box for float input with step size based on decimal places.
str (contains os.sep) FileAutocomplete A custom widget for selecting files from the working directory.
str (contains "password") ipywidgets.Password A password input field.
str (ends with ...) ipywidgets.Textarea A multi-line text area with the placeholder text (excluding ...).
str (other cases) ipywidgets.Text A single-line text input field with the string as a placeholder.
tuple ipywidgets.Dropdown A dropdown menu with the tuple values as options.
dictionary ... A collapsible sub-form with the dictionary mapped according to this table.
Other types ipywidgets.Label A label displaying "Unsupported type: <type_name>".

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ipyformkit-0.2.0a0.tar.gz (14.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ipyformkit-0.2.0a0-py3-none-any.whl (13.5 kB view details)

Uploaded Python 3

File details

Details for the file ipyformkit-0.2.0a0.tar.gz.

File metadata

  • Download URL: ipyformkit-0.2.0a0.tar.gz
  • Upload date:
  • Size: 14.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for ipyformkit-0.2.0a0.tar.gz
Algorithm Hash digest
SHA256 62e317a5ce5d4c4fc866972e06c3ad1bcd1ce945d7149d20e47a4c5266bbcbfd
MD5 eeea6feebeeb7d103a84da982848d08e
BLAKE2b-256 2871a43982a5df457b35587e651f06a9a3606d3aad8c5542c06a87d4d1e277fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for ipyformkit-0.2.0a0.tar.gz:

Publisher: python-publish.yml on RMHoppe/IpyFormKit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ipyformkit-0.2.0a0-py3-none-any.whl.

File metadata

  • Download URL: ipyformkit-0.2.0a0-py3-none-any.whl
  • Upload date:
  • Size: 13.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for ipyformkit-0.2.0a0-py3-none-any.whl
Algorithm Hash digest
SHA256 7f84336c0ac302eeea9695d8d72e8c6e66f414012c7dd7dd2bc9da53586146ec
MD5 f7f4fc5a7a474e4fc174b601d59da00b
BLAKE2b-256 a12ad58c6d79e7687aa3eb683e292536965c799e7ef55e9233f0b6ff6b742d6f

See more details on using hashes here.

Provenance

The following attestation bundles were made for ipyformkit-0.2.0a0-py3-none-any.whl:

Publisher: python-publish.yml on RMHoppe/IpyFormKit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page