Skip to main content

pgwidgets-python logo

pgwidgets — Python Bindings

Python bindings for the pgwidgets JavaScript widget library. Build desktop-style browser UIs from Python with a familiar Qt/GTK-style API.

Documentation

Full documentation is available at pgwidgets-python.readthedocs.io.

Installation

pip install pgwidgets-python

This will also install pgwidgets-js (the JavaScript assets) and websockets as dependencies.

Quick Start

from pgwidgets.sync import Application

app = Application()

@app.on_connect
def setup(session):
    Widgets = session.get_widgets()

    top = Widgets.TopLevel(title="Hello", resizable=True)
    top.resize(400, 300)

    vbox = Widgets.VBox(spacing=8, padding=10)
    btn = Widgets.Button("Click me")
    label = Widgets.Label("Ready")

    btn.on("activated", lambda: label.set_text("Clicked!"))

    vbox.add_widget(btn, 0)
    vbox.add_widget(label, 1)
    top.set_widget(vbox)
    top.show()

app.run()

Run the script, then open the printed URL in your browser.

Sync vs Async

Both APIs provide the same widget classes and methods.

Synchronous (recommended for most use cases):

from pgwidgets.sync import Application
app = Application()

@app.on_connect
def setup(session):
    Widgets = session.get_widgets()
    btn = Widgets.Button("Click")      # blocking call
    btn.set_text("New text")           # blocking call

app.run()

Asynchronous (for asyncio applications):

from pgwidgets.async_ import Application
app = Application()

@app.on_connect
async def setup(session):
    Widgets = session.get_widgets()
    btn = await Widgets.Button("Click")    # awaitable
    await btn.set_text("New text")         # awaitable

await app.run()

How It Works

The Application class starts two servers:

  • An HTTP server (default port 9501) that serves the pgwidgets JS/CSS and a connector page
  • A WebSocket server (default port 9500) for the JSON command protocol

When you open the URL in a browser, the page loads pgwidgets and connects back over WebSocket. Python widget constructors and method calls are translated to JSON messages and executed in the browser. Callbacks are forwarded back to Python.

Sessions and Reconnection

Sessions persist independently of browser connections. When a browser disconnects (page refresh, network drop, tab close), the session and its widget tree remain alive on the Python side. When the browser reconnects, the entire UI is automatically reconstructed.

app = Application(max_sessions=4, logger=logger)

@app.on_connect
def setup(session):
    Widgets = session.get_widgets()
    # Build your UI...
    # If the browser refreshes, this UI is reconstructed automatically.

Key features:

  • Automatic reconstruction -- refresh the browser and the UI reappears in its current state (widget positions, text, slider values, etc.).
  • Multi-browser support -- open the same session URL in a second browser tab or window. Both browsers show the same UI and stay synchronized. Widget state changes (slider moves, tab switches, tree expand/collapse) are pushed to all connected browsers in real time.
  • Headless sessions -- create sessions without a browser using app.create_session(), build the widget tree, then connect a browser later to see the pre-built UI.

License

BSD 3-Clause

Metadata

Release files for pgwidgets-python 0.4.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pgwidgets-python 0.4.2
File Size Uploaded
pgwidgets_python-0.4.2.tar.gz 2.6 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for pgwidgets-python 0.4.2
File Interpreter ABI Platform
pgwidgets_python-0.4.2-py3-none-any.whl Python 3 none any Details

Total release size: 5.2 MB

Release files / pgwidgets_python-0.4.2.tar.gz

Download URL pgwidgets_python-0.4.2.tar.gz
Size 2.6 MB
Tags Source
SHA-256 checksum
How to use checksums
dc2b56c8dab6bda5ee08051d58f3c796afbdde8c06f22d0d4b3efbc9b98fdeb3
BLAKE2b-256 checksum
How to use checksums
4d9b8edf6f98a84e3b1e607e8c372266ea6537b67299f0d3ef1452744521c90b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / pgwidgets_python-0.4.2-py3-none-any.whl

Download URL pgwidgets_python-0.4.2-py3-none-any.whl
Size 2.5 MB
Tags Python 3
SHA-256 checksum
How to use checksums
837c2cf3cea6382c4a9ae1d3898f53a7d7b0c30c73e7270cc29851a71140cbb5
BLAKE2b-256 checksum
How to use checksums
e00ebcfaa66bfcaadbfb8cf87b7c2c71d2e97e669de3377c6589483c482d794c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release history Release notifications | RSS feed

This release

0.4.2 This release

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page