Simple OPC-UA GUI client built on asyncua and PyQt6.
PRs welcome for any wished improvements.
- Connect / disconnect, with automatic reconnect when the transport drops: views grey out and a status-bar banner is shown while the supervisor re-establishes the session.
- Browse the address space with per-node-type icons.
- Show attributes and references for the selected node.
- Subscribe to variable data changes and to events.
- Write variable values.
- GUI for application certificates and per-server security mode / policy.
- Call methods (with dialog).
- Live-plot subscribed variables (pyqtgraph).
- Persist connection history, the last-browsed node per server, and window
layout via
QSettings. - Context menu with handy helpers: copy NodeId, or copy the full browse path
so you can paste it into your own code:
client.nodes.root.get_child(['0:Objects', '2:MyNode']).
PyQt6 is required. Python 3.14 or newer.
pip install opcua-client
opcua-client
pip install opcua-client --upgrade to update.
The project uses uv for environment and build
management.
uv sync # install deps + dev tools into .venv
uv run python app.py
uv run python tests.py # integration tests need a free port
uv run mypy uaclient uawidgets # type check
After editing any .ui or .qrc source, run make to regenerate
uaclient/*_ui.py, uaclient/theme/breeze_resources.py, and
uawidgets/resources.py. Targets:
make— regenerate UI / resource Python from Qt sources.make run— launch the GUI.make edit— open the main.uiin Qt Creator.
Cutting a release:
uv run python release.py # bumps pyproject.toml, tags, uv build, uv publish
asyncua is currently consumed via a local path source
([tool.uv.sources] asyncua = { path = "../opcua-asyncio", editable = true })
because the 2.x line is still in pre-release. Drop the source entry once
asyncua>=2.0 is on PyPI.
- History read.
