Skip to main content

Generate QML stub files (.qmltypes) from Python modules (which use PySide6)

Project description

pyside6-qml-stubgen

Generate QML stub files (.qmltypes) from Python modules (which use PySide6)

Installation

This tool can be installed though PyPI:

pip install pyside6-qml-stubgen

If you want to use a development version, instead clone the repo and then install using pip:

git clone https://github.com/matsjoyce/pyside6-qml-stubgen.git
pip install ./pyside6-qml-stubgen

This tool has been tested on Linux, Windows and MacOS using pip-installed PySide6 (on GitHub Actions), and on Arch Linux using system packages. It does not run with PyQt6, although it should be possible in theory (send a PR if you get it working). And finally, it does not run using Qt 5 (PySide2 or PyQt5), as that version is no longer being developed, and QML in Qt 5 has less features than in Qt 6, making it a less attractive target for this sort of tool.

[!WARNING] Does not work on Qt 6.10 from PyPI on Linux and MacOS due to https://bugreports.qt.io/browse/PYSIDE-3241

Simple example

As an example, we'll run this tool on https://github.com/matsjoyce/fantasia2. There are two steps to type checking your QML code when using PySide6. First generate the QML type stubs using this tool:

pyside6-qml-stubgen fantasia2 --out-dir qmltypes --ignore fantasia2/alembic/

This command will generate a folder tree containing .qmltypes files and qmldir files matching the runtime structure of QML modules registered by the Python modules.

The second step is to run qmllint on your QML files using the type stubs:

/usr/lib/qt6/bin/qmllint fantasia2/*.qml -I ./qmltypes

If you change the QML files, you can just rerun qmllint. If you change the Python interface, you should rerun both commands.

Links to other projects

This tool relies heavily on PySide6, and is inspired by the metaobjectdump.py tool, although this tool uses a runtime approach instead of static analysis, as that works better on large programs.

Command-line arguments

$ pyside6-qml-stubgen --help
Generate QML stub files (.qmltypes) from Python modules (which use PySide6)

Usage:
    pyside6-qml-stubgen <in-dir>... --out-dir=<out-dir> [--ignore=<path>...] [--metatypes-dir=<dir>] [--qmltyperegistrar-path=<path>] [--force-rebuild] [--file-relative-path=<div>] [--extra-external-modules=<modules>]
    pyside6-qml-stubgen (-h | --help)
    pyside6-qml-stubgen --version

Options:
    --ignore=<path>                     Ignore all Python files that are children of this path
    --metatypes-dir=<dir>               Directory of the Qt 6 metatype files for core modules (automatically detected if not provided)
    --qmltyperegistrar-path=<path>      Path of the qmltyperegistrar tool (automatically detected if not provided)
    --force-rebuild                     Rebuild the stubs from scratch instead of doing a partial update
    --file-relative-path=<div>          Make all paths in generated type files relative to this path
                                            (useful for if the generated stubs need to be used on different systems)
    --extra-external-modules=<modules>  Additional modules which should be assumed to contain QML exposed types (comma separated)
    -h --help                           Show this screen
    --version                           Show version

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyside6_qml_stubgen-0.1.0a10.tar.gz (27.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyside6_qml_stubgen-0.1.0a10-py3-none-any.whl (17.8 kB view details)

Uploaded Python 3

File details

Details for the file pyside6_qml_stubgen-0.1.0a10.tar.gz.

File metadata

  • Download URL: pyside6_qml_stubgen-0.1.0a10.tar.gz
  • Upload date:
  • Size: 27.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyside6_qml_stubgen-0.1.0a10.tar.gz
Algorithm Hash digest
SHA256 7aec7dcccb9026ed8373dd1b45f6ff311c74177df07551442870e862a7864b44
MD5 f8a978ea9ca65ddbc46e46c3653eb077
BLAKE2b-256 36c39524beace3b29b2b2970f70d897c7c6a1e2d7ca41bb75fabc85db401f6fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyside6_qml_stubgen-0.1.0a10.tar.gz:

Publisher: test.yml on matsjoyce/pyside6-qml-stubgen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyside6_qml_stubgen-0.1.0a10-py3-none-any.whl.

File metadata

File hashes

Hashes for pyside6_qml_stubgen-0.1.0a10-py3-none-any.whl
Algorithm Hash digest
SHA256 a72683ff276e579be30c2faa7f44ae4fd8e07ce396d5f08e6e0ff64014da66b3
MD5 a3830a8e7b049024776a91e07e6401ea
BLAKE2b-256 f06bb237d7f63d065f1750239392c5d4d39b3e0ba364312565439f0e9ee87799

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyside6_qml_stubgen-0.1.0a10-py3-none-any.whl:

Publisher: test.yml on matsjoyce/pyside6-qml-stubgen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page