pdwidgets
Pure-Python, portable widget toolkit for PyDevices
pdwidgets provides a complete, 100% pure-Python GUI toolkit for building touchscreen and desktop interfaces without requiring native C bindings or complex build toolchains. It runs seamlessly on MicroPython, CircuitPython, CPython desktop, and PyScript (Web).
Where pdwidgets fits
PyDevices offers several GUI approaches; pdwidgets is the pure-Python one. See
pydevices — choosing a GUI layer.
Quick Start: Interactive Button & Screen
import board_config
import appdev
import pdwidgets as pd
from pdwidgets.icons import touch_app # Pure-Python icon bytecode
# 1. Initialize display and the event app
app = appdev.App(board_config)
display = pd.Display(board_config.display_drv, app)
screen = pd.Screen(display)
_taps = 0
# 2. Add an interactive button with a click handler
btn = pd.Button(
screen,
x=40,
y=60,
w=160,
h=50,
label="Tap me (0)",
icon=touch_app,
)
def on_button_click(event):
global _taps
_taps += 1
btn.set_label(f"Tap me ({_taps})")
display.refresh()
btn.on_click(on_button_click)
# 3. Draw the initial screen. The app runs itself from here -- no app.run()
# is needed; call it only to block at this point or to get an exit code.
display.show(screen)
Key Features
- 100% Pure Python & Portable: Zero native C extensions or compilation steps required.
- Zero-File Icon System (
pdwidgets.icons): Material Design icons packaged directly as importable Python bytecode modules (bytearraybitmaps)—no SD card assets, binary file I/O, or asset path management needed. - MCU Memory-Friendly (Lean Imports): Import individual widgets to minimize RAM footprint on microcontrollers:
from pdwidgets.widgets.button import Button from pdwidgets.widgets.screen import Screen
- Integrated Theming: Customizable color schemes, border radii, and visual states using
palettes.
Installation
import mip
# pdwidgets does not pull its dependencies on MIP -- install them too.
mip.install("pydevices", index="https://PyDevices.github.io/mip")
mip.install("pygraphics", index="https://PyDevices.github.io/mip")
mip.install("palettes", index="https://PyDevices.github.io/mip")
mip.install("pdwidgets", index="https://PyDevices.github.io/mip")
pip install -i https://test.pypi.org/simple/ \
--extra-index-url https://pypi.org/simple/ pydevices-pdwidgets
Full dependency chain and board_config requirements:
docs/index.md.
Links & Demos
License
MIT — see LICENSE.
Icon assets (maintainers)
Runtime icons are importable Python modules under lib/pdwidgets/icons/
(no binary mip). Authoring:
# 1) Optional: regenerate mono .pbm / color .bmp from Material Design
.venv/bin/python scripts/assets_generate_pdwidgets_icons.py
.venv/bin/python scripts/assets_make_color_icons.py
# 2) Convert binaries → .py modules (BITMAP = bytearray; uses sibling or TestPyPI pygraphics)
.venv/bin/python scripts/assets_icons_to_py.py --delete-binaries
# Optional bulk dump into assets/icons/
.venv/bin/python scripts/assets_convert_md_png_to_pbm.py
# PNG smoke probe (PyDevices display stack + material-design-icons png/)
SDL_VIDEODRIVER=dummy ../pydevices-examples/.venv/bin/python tools/png_test.py
Metadata
Release files for pydevices-pdwidgets 0.0.22
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pydevices_pdwidgets-0.0.22.tar.gz | 84.3 kB | Without provenance | Details for pydevices_pdwidgets-0.0.22.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pydevices_pdwidgets-0.0.22-py3-none-any.whl | Python 3 | none | any | Details for pydevices_pdwidgets-0.0.22-py3-none-any.whl |
Total release size: 219.4 kB
Release files / pydevices_pdwidgets-0.0.22.tar.gz
| Download URL | pydevices_pdwidgets-0.0.22.tar.gz |
|---|---|
| Size | 84.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a9177628fba3551297d1293654a69698ff034564595d0ebfaf3499fd77649167
|
|
BLAKE2b-256 checksum How to use checksums |
e76017fbd0b94d00f3a7ca7cf72e0d52b4bbc313057ddc8325e32d97df710b92
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / pydevices_pdwidgets-0.0.22-py3-none-any.whl
| Download URL | pydevices_pdwidgets-0.0.22-py3-none-any.whl |
|---|---|
| Size | 135.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1108c8d4f5ddbcd4ff0427f1651c6986753128b4338b3a1e261b845774d6aad3
|
|
BLAKE2b-256 checksum How to use checksums |
426bc492ac92c69f3504a473da81d1f7a0126c415973f3d2d18fdaf2f8a522ef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Security for pydevices-pdwidgets 0.0.22
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.