Skip to main content

A Fluent Design-like UI library for Qt Quick (QML) based on PySide6

Project description

FluentQML Logo

FluentQML

Fluent Design components for PySide6 and Qt Quick.

Version Downloads License Platform

English | 中文

[!IMPORTANT] FluentQML is a secondary development based on RinUI RinUI is licensed under the MIT License, and the original copyright notice is preserved in this repository's license file.

FluentQML Gallery

Overview

FluentQML is a PySide6 + QML component library for building desktop interfaces with a Fluent Design inspired look and feel. It provides reusable Qt Quick controls, window chrome, theme handling, icon support, translation loading, and a gallery app that demonstrates the available components.

The project is designed for developers who want to keep their application UI in QML while using Python for application startup, window management, configuration, and platform integration.

Compared with RinUI

FluentQML currently adds these changes:

  • macOS native window materials: System, HUD, and None.
  • Better macOS window handling, including native title-bar integration and smoother window dragging.
  • Windows 11 Snap Layout support for custom windows.
  • Acrylic label material demo and TableView component support.
  • QML, fonts, images, and translations compiled into Qt qrc resources for PyPI packages.
  • Cross-platform Python scripts for resource building, Gallery packaging, and releases.
  • Fixes for CalendarDatePicker, Expander rounded corners, page refresh behavior, and config paths.

Installation

Install from PyPI after the package is published:

pip install fluentqml

For local development, install this repository in editable mode:

git clone https://github.com/Cheukfung/Fluent-QML.git
cd fluentqml
uv sync

If you are not using uv, install the runtime dependencies manually:

pip install PySide6 darkdetect

Quick Start

Create a QML file, for example main.qml:

import QtQuick
import FluentQML

FluentWindow {
    visible: true
    width: 900
    height: 600
    title: "FluentQML App"

    Text {
        anchors.centerIn: parent
        text: "Hello FluentQML"
    }
}

Launch it from Python:

import sys

from PySide6.QtWidgets import QApplication
from fluentqml import FluentQMLWindow

app = QApplication(sys.argv)
window = FluentQMLWindow("main.qml")
sys.exit(app.exec())

The QML import name is FluentQML; the Python package name is fluentqml.

Gallery

Run the gallery app from the repository root:

uv run python examples/gallery.py

Or, if you are managing dependencies yourself:

python examples/gallery.py

The gallery is the best place to inspect available controls and copy working usage patterns while the formal documentation is still being written.

Project Layout

fluentqml/              Core Python package, QML modules, resources, hooks
examples/               Gallery app and component usage examples
docs/                   Images and documentation drafts
scripts/                Resource and release helper scripts
test/                   Small local QML loading experiments

Development

Regenerate the Qt resource bundle after changing QML, fonts, images, or translation files:

uv run python scripts/build_fluentqml_qrc.py

Run lint checks:

uv run ruff check .

Update library translations:

uv run python scripts/update_ts.py library

Update Gallery translations:

uv run python scripts/update_ts.py gallery

Package the Gallery app with PyInstaller:

uv run python scripts/package_gallery.py

Build release artifacts:

uv run python scripts/release.py build

The release script cleans dist/, regenerates fluentqml_rc.py, builds the sdist and wheel, verifies that the wheel contains fluentqml/fluentqml_rc.py, checks that raw QML resources are not accidentally included in the wheel, and runs twine check.

Upload the already-built artifacts to TestPyPI:

uv run python scripts/release.py upload-testpypi

Upload the same artifacts to PyPI after testing the TestPyPI install:

uv run python scripts/release.py upload-pypi

Useful naming conventions in this project:

  • Python import: from fluentqml import FluentQMLWindow
  • QML import: import FluentQML
  • Qt resource prefix: qrc:/FluentQML
  • Generated resource module: fluentqml.fluentqml_rc

Credits

FluentQML uses resources and ideas from the wider Qt and Fluent ecosystem:

License

FluentQML is released under the MIT License. See LICENSE for the full license text.

Copyright (c) 2026 Cheukfung

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

fluentqml-0.3.0.tar.gz (653.8 kB view details)

Uploaded Source

Built Distribution

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

fluentqml-0.3.0-py3-none-any.whl (847.0 kB view details)

Uploaded Python 3

File details

Details for the file fluentqml-0.3.0.tar.gz.

File metadata

  • Download URL: fluentqml-0.3.0.tar.gz
  • Upload date:
  • Size: 653.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fluentqml-0.3.0.tar.gz
Algorithm Hash digest
SHA256 ac68a9560332f97fdc1dcb31df5b882ae5bdf0a7181fb8a5459b1f39f0030c5a
MD5 009239dd7696c1dd8abd564c4601eec9
BLAKE2b-256 080af30b787fb919aa4271131775efe4019bd9264cc024c8bc669c4c494323cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for fluentqml-0.3.0.tar.gz:

Publisher: python-publish.yml on Cheukfung/Fluent-QML

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

File details

Details for the file fluentqml-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: fluentqml-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 847.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fluentqml-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2a6c9831f47040a69b0948e417b67a399efbbed29e21b62bd1dce250e4536cd2
MD5 bc8f0ed53be29e0b037f22490b406a78
BLAKE2b-256 345e779d5b235a71b01ac1bbbba07cb5d34d2bdb1820113c4f66f0397d32aae0

See more details on using hashes here.

Provenance

The following attestation bundles were made for fluentqml-0.3.0-py3-none-any.whl:

Publisher: python-publish.yml on Cheukfung/Fluent-QML

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