One canvas API, multiple backends 🚀
See how the two windows above look the same? That's the idea; they also look the same to the code that renders to them. Yet, the GUI systems are very different (Qt vs glfw in this case). Now that's a powerful abstraction!
- Provide a generic canvas API to render to.
- Provide an event loop for scheduling events and draws.
- Provide a simple but powerful event system with standardized event objects.
- Provide various canvas implementations:
- One that is light and easily installed (glfw).
- For various GUI libraries (e.g. qt and wx), so visuzalizations can be embedded in a GUI.
- For specific platforms (e.g. Jupyter, browser).
The main use-case is rendering with wgpu,
but rendercanvas
can be used by anything that can render based on a window-id or
by producing rgba images.
pip install rendercanvas
To have at least one backend, we recommend:
pip install rendercanvas glfw
Also see the online documentation and the examples.
# Select either the glfw, qt or jupyter backend
from rendercanvas.auto import RenderCanvas, loop
# Visualizations can be embedded as a widget in a Qt application.
# Supported qt libs are PySide6, PyQt6, PySide2 or PyQt5.
from rendercanvas.pyside6 import QRenderWidget
# Now specify what the canvas should do on a draw
TODO
This code is distributed under the 2-clause BSD license.
- Clone the repo.
- Install
rendercanvas
and developer deps usingpip install -e .[dev]
. - Use
ruff format
to apply autoformatting. - Use
ruff check
to check for linting errors. - Optionally, if you install pre-commit hooks with
pre-commit install
, lint fixes and formatting will be automatically applied ongit commit
. - Use
pytest tests
to run the tests.