Skip to main content

Handy graphical user interface library for daily use

Project description

PancakeKit

PancakeKit is a lightweight browser UI for Python scripts. Add small UI components (“toppings”) to a page (Pancake), then serve it locally.

Installation

pip install pancakekit

Quick start

from pancakekit import Pancake

def fibonacci(n=10):
    return (fibonacci(n - 1) + fibonacci(n - 2)) if n >= 2 else n

cake = Pancake()     # 1) create a page
cake.add(fibonacci)  # 2) add a function (auto UI)
cake.serve()         # 3) start the server

Open http://127.0.0.1:8000/.

Interactive mode

In interactive environments (REPL/IPython), Pancake() starts the server automatically by default.

from pancakekit import *

cake = Pancake()  # auto-serve in interactive mode

# To opt out:
# cake = Pancake(auto_serve_in_interactive_mode=False)
# cake.serve()

You can also start a ready-to-use interactive session from the command line:

python -m pancakekit

Or load an existing script and auto-register callables:

python -m pancakekit path/to/your_script.py

Values and events

Most toppings expose their state through .value.

from pancakekit import *

cake = Pancake()
age = cake.add(Input("Age", default=20), name="age")
age.value_changed = lambda v: cake.show_message({"age": v})

You can access toppings by name:

from pancakekit import *

cake = Pancake()
cake.add(Input("Count", default=0), name="count")
cake["count"].value += 1

Buttons: clicked and long-press pressed

from pancakekit import *

cake = Pancake()
btn = cake.add(Button("Hold me"))

btn.clicked = lambda _v: cake.show_message("clicked")
btn.pressed = lambda _v: cake.show_message("pressed")

Long-press behavior:

  • pressed starts after ~0.5s hold, then repeats while held down
  • repeats after the previous handler finishes, with ~0.1s delay
  • if clicked is not set but pressed is set, pressed fires immediately on pointer down

Honeycomb (script editor)

Each Pancake has a built-in Honeycomb card.

  • Toggle: Shift + Enter
  • Run: Cmd/Ctrl + Enter
  • Recall saved scripts: Cmd/Ctrl + ↑ / ↓ (when Honeycomb is open)

Inside Honeycomb, the current page is available as the reserved name cake.

Built-in toppings

Inputs

  • Input(label, default=None, placeholder=None)
  • DictInput(default: dict, horizontal: bool = False)
  • Slider(label, range_min, range_max, value=None, step=1.0)
  • Select(label, options, value=None, placeholder=None, with_clear=False, allow_none=None, disabled=False)
  • Switch(label="", value=False, disabled=False)
  • RadioGroup(label, options, value=None, orientation="vertical", appearance=None, allow_none=False, disabled=False)

Display

  • Label(text=""), Text(text=""), Paragraph(text="")
  • ImageView(image: PIL.Image | str), ImageCard(image: PIL.Image | str)
  • Table(df: pandas.DataFrame | dict)
  • ProgressBar(value=0, label=None, max_value=100, show_value=True)

Layout / containers

  • Row(), Column(), Group(...)
  • Card(...), FloatingCard(...) (floating draggable cards)
  • GridPanel(size=(rows, cols), status_dict=None, style=None)

Multiple pages with Plate

from pancakekit import *

plate = Plate()

class Crape(Pancake):
    def decorate(self):
        b = self.add(Button("Go to Waffle"))
        b.clicked = lambda _v: plate.go_to("Waffle")

class Waffle(Pancake):
    def decorate(self):
        b = self.add(Button("Go to Crape"))
        b.clicked = lambda _v: plate.go_to("Crape")

Crape(plate)
Waffle(plate)
plate.serve()

Making a custom topping

from pancakekit import Topping, Tag

class MyLabel(Topping):
    def prepare(self, text):
        self.value = text
        self.label = Tag("label", style={"text-shadow": "1px 1px 1px #bbb"}, value_ref=self)

    def html(self):
        return self.label.render()

Useful hooks:

  • prepare(self, *args, **kwargs) (one-time setup)
  • html(self) (render HTML)
  • value_getter(self) / value_preprocessor(self, value) / web_value_proprocessor(self, tag, value)
  • event_preprocessor(self, event)

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

pancakekit-0.3.0.tar.gz (120.8 kB view details)

Uploaded Source

File details

Details for the file pancakekit-0.3.0.tar.gz.

File metadata

  • Download URL: pancakekit-0.3.0.tar.gz
  • Upload date:
  • Size: 120.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.9

File hashes

Hashes for pancakekit-0.3.0.tar.gz
Algorithm Hash digest
SHA256 617e40a04deb633be86c68c73834a345814c6e86886860581c8837b6c5ac4edf
MD5 134fba154075b9770dc2169560fbf9bd
BLAKE2b-256 bd9262d425507383af44d54997a5e0f492ee587f250c85de2b9d0df8f38c2d1a

See more details on using hashes here.

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