Python ManaTools builds on the original Perl-based ManaTools idea, keeping the same goal of a shared toolkit and consistent UX while moving to Python to match systemd and D-Bus APIs. We are grateful to libyui for the foundation it provided, but this project now ships its own AUI layer and keeps evolving independently. Today it focuses on a backend-agnostic UI abstraction for GTK, Qt, ncurses, and the web, plus the services and helpers needed by ManaTools.
One application source tree runs unchanged on any of the four backends: a single MUI_BACKEND environment variable picks Qt, GTK 4, ncurses, or a browser UI served by a pure standard-library HTTP/WebSocket server — no extra dependency needed for the web backend.
See the AUI API documentation for details: manatools AUI API.
- dbus-python — D-Bus bindings used by
manatools.services - PyYAML — YAML configuration file support (
manatools.config) - python-gettext — internationalisation helpers
- PyGObject >= 3.42 (
gi) — Python GObject introspection bindings - GTK 4 — the GTK 4 toolkit libraries (
gtk4) - GdkPixbuf 2 — image loading for icons (
gdk-pixbuf2) - pycairo — Cairo drawing context used by GTK widgets (
python3-cairo) - Optional: WebKitGTK 6.0 introspection data (gi namespace
WebKit6.0) — HTML engine forYHtmlView; without it the widget falls back to a text rendering in aGtk.Label(Mageia:lib64webkitgtk-gir6.0). The WebKit2 4.x bindings target GTK 3 and are not used.
- PySide6 >= 6.5.0 — Qt 6 Python bindings
- Optional: QtWebEngine bindings (
PySide6.QtWebEngineWidgets) — HTML engine forYHtmlView; without them the widget falls back toQTextBrowser. The PyPIPySide6package already includes them; distributions often ship them separately (Mageia:python3-pyside6-webenginewidgets, which also needspython3-pyside6-network,python3-pyside6-webchannelandpython3-pyside6-printsupport).
- curses — included in the Python standard library (no extra install needed)
YHtmlViewrenders HTML as navigable text; no extra dependency.
- No extra dependency — pure Python standard library (
http.server+ a hand-rolled WebSocket server). Runs in any modern browser; the server binds127.0.0.1only. YHtmlViewis served into a sandboxed<iframe>by the same server; no extra dependency.
Set MUI_BACKEND before the first call to YUI.ui():
MUI_BACKEND=web python3 your_app.py
Accepted values: qt, gtk, ncurses, web (case-insensitive). Without it, Qt, GTK, and ncurses are auto-detected in that order — web is never auto-detected and must be requested explicitly.
pip install python-manatools
Or from sources:
poetry install