sg-widgets-qt
Flow Production Tracking (formerly ShotGrid) widgets for Qt: pickers, editors, tables, trees, grids and search. For pipeline developers writing tools inside Maya, Houdini, Nuke, RV or a standalone app.
Install
pip install sg-widgets-qt
uv add sg-widgets-qt
Python 3.9 and up. The package brings shotgun_api3 and qtpy and no Qt binding, because a DCC
imports its own before your code runs. Outside a DCC, name a binding as an extra.
pip install "sg-widgets-qt[pyside6]"
pip install "sg-widgets-qt[pyqt5]"
Every Qt import here goes through qtpy, so one widget runs on PySide2, PySide6, PyQt5 and PyQt6, and on whichever of them the host imported first.
A first widget
Three environment values point at a site: FPT_API_SITE_URL, FPT_API_SCRIPT_NAME and
FPT_API_API_KEY.
from qtpy.QtWidgets import QApplication
from sg_widgets_core import ShotgunClient, create_sg_context
from sg_widgets_qt.widgets.entity_picker import EntityPicker
app = QApplication([])
context = create_sg_context(ShotgunClient.from_env())
picker = EntityPicker(entity_types=["Shot"], context=context)
picker.value_changed.connect(lambda ref, row: print(ref))
picker.show()
app.exec_()
The context is built once and handed to every widget. The same picker runs on a generated site, with no credentials and no network.
from sg_widgets_core import MockClient, create_sg_context
context = create_sg_context(MockClient())
picker = EntityPicker(entity_types=["Shot"], context=context)
The showcase
python -m sg_widgets_qt.showcase
One page per widget, with a live demo, the props, signals, slots and keyboard tables, and the docs prose. The pages ship inside the package. The demos run on the mock, so the showcase needs no site; its toolbar offers Live where the three values above are set.
The widgets
| A picker searches the site, holds what was ticked as chips, and emits references. | |
| The filter editor builds a condition tree and serialises it for the API. | |
| Statuses carry the site's own names, codes, colours and icons, per project. | |
| Global search reads across entity types and marks what matched. | |
| A table, a grid and a tree page a set, sort it, group it and edit a cell. | |
| Every widget wears a light and a dark theme, or the host application's palette. |
Every shot above reads a live site. One page per widget says what each one takes and emits, beside the introduction, install and the core.
How it relates to sg-widgets
This is a port of sg-widgets, whose React and Svelte
widgets carry the same names, props and behaviour, and whose
documentation site is the reference for what a widget does; the
pages here say where Qt or Python forced a difference. The framework-neutral half comes with it as
sg_widgets_core, which holds the field data types, the operator vocabularies, the filter tree,
status logic, the formatters, the parsers, the client protocol and a generated mock site, and
imports no Qt, so it runs in a farm job as well as in a window. What either repo claims about the
API is measured in sg-groundtruth and cited where it
is relied on.
Status
Alpha. 52 widgets, 27 core modules and 55 documentation pages are complete, on Python 3.9 through
3.13 and on Qt 5.15 and Qt 6. Both packages carry py.typed. Names, props and signals can still
change between 0.x releases, and the
changelog records what changed.
Ask for a widget, report a defect or say what reads wrong in the
issues.
Licence
MIT. See LICENSE.
Metadata
Release files for sg-widgets-qt 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sg_widgets_qt-0.1.0.tar.gz | 2.4 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sg_widgets_qt-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 4.4 MB
Release files / sg_widgets_qt-0.1.0.tar.gz
| Download URL | sg_widgets_qt-0.1.0.tar.gz |
|---|---|
| Size | 2.4 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4e2e1b459291e6c7c84c45b17f88f5e6b1b040c7d40d764c3c83af0fd058e896
|
|
BLAKE2b-256 checksum How to use checksums |
bb743a9a3266f2510659dd1ef6bc01d7ed9fb9e4e8dd814c03977f88b30237ac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.
Transparency logRelease files / sg_widgets_qt-0.1.0-py3-none-any.whl
| Download URL | sg_widgets_qt-0.1.0-py3-none-any.whl |
|---|---|
| Size | 1.9 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
73f8556b8fe8ee84c5cde20e9032bb5536450a0bd566a9aa457c428ae562733e
|
|
BLAKE2b-256 checksum How to use checksums |
8c3c011817ea1a37874a620c7d53b61f6b0e31d4524d664d977edd183126b114
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.
Transparency log