An enhanced Material Design stylesheet library for Qt (PyQt5, PyQt6, PySide2 and PySide6)
Project description
QMaterialise
QMaterialise is a modern Material Design stylesheet library for Qt applications written in Python. It is a ground‑up redesign of the qt‑material library by UN‑GCPDS, and we’re grateful for their original work. It draws inspiration from the Material Design specification and provides a clean and flexible implementation with:
- Cross‑binding support – works with PyQt5, PyQt6, PySide2 and PySide6. At runtime the library automatically selects whichever binding is installed.
- Comprehensive colour palettes – more Material Design colours are built in, including all of the primary swatches and their tints/shades.
- Easy customisation – generate new styles from a few colours or load predefined styles shipped with the package. Styles are expressed as JSON dictionaries, making them easy to edit and share.
- Dynamic theming – apply a new style to a running application without restarting it and switch between dark and light variants on the fly.
- Runtime extras – override button colours, fonts, density scale and more by passing an extra dictionary to the inject_style function.
- Export to QSS – write the generated stylesheet to a
.qssfile so it can be used directly in Qt Designer or C++ projects.
Material Design is a design system created by Google. QMaterialise provides a coherent set of colours and styles that conform to the specification while still giving you freedom to customise the look and feel of your application.
Installation
QMaterialise can be installed from PyPI. Depending on which Qt binding you intend to use you should also install the corresponding optional dependency:
# Install the core library
pip install "q-materialise"
Quick start
The simplest way to style your application is to call
inject_style() after you create your QApplication instance. This
function accepts either the name of one of the built‑in styles or a
custom Style object:
import sys
from q_materialise import inject_style, list_styles
try:
# Try to import your preferred Qt binding
from PySide6 import QtWidgets
except ImportError:
from q_materialise.binding import QtWidgets # internal helper
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()
# Print the available built‑in styles
print(list_styles())
inject_style(app, style="indigo_twilight")
window.setWindowTitle("QMaterialise Example")
window.resize(480, 320)
window.show()
sys.exit(app.exec())
To customise individual aspects of the style, pass an extra
dictionary. For example, to change the colours of different classes
of QPushButton:
extra = {
"danger": "#dc3545",
"warning": "#ffc107",
"success": "#198754",
"info": "#0d6efd",
"font_family": "Roboto",
"font_size": "14px",
"density_scale": 0,
}
inject_style(app, style="sapphire_day", extra=extra)
Button classes are attached by setting the class property on the
widget:
push_button.setProperty("class", "danger")
Generating custom styles
To create a completely new style programmatically, use the
generate_style() function. Pass your primary and secondary base
colours and indicate whether the style should be dark or light. The
function returns a Style instance with sensible tints and shades
computed for you:
from q_materialise import generate_style, inject_style
my_style = generate_style(
name="my_custom_dark",
primary="#9c27b0", # purple
secondary="#ffeb3b", # yellow
is_dark=True,
)
inject_style(app, style=my_style)
Styles are plain data classes and can be serialised to and from JSON. For example:
import json
json_string = my_style.to_json(indent=4)
with open("my_style.json", "w", encoding="utf-8") as f:
f.write(json_string)
# Later
from q_materialise import Style
with open("my_style.json", encoding="utf-8") as f:
other_style = Style.from_json(f.read())
Listing styles
Built‑in styles are stored as JSON files in the package. You can list
them at runtime with list_styles() and load one with
get_style(name):
from q_materialise import list_styles, get_style
print(list_styles())
indigo_style = get_style("indigo_twilight")
Exporting a stylesheet
If you want to use the generated stylesheet outside of Python you can
export it to a .qss file. The export_style() function takes the
name of the style, the destination file and optional extras:
from q_materialise import export_style
export_style(style="indigo_twilight", qss_path="indigo_twilight.qss")
Documentation
Full documentation is published online and can be accessed at:
https://lewis-morris.github.io/qmaterialise
Contributing
Contributions are welcome! If you find a bug or have an idea for a
feature, please open an issue or submit a pull request. Feel free to
add new styles by placing a JSON file in the
src/q_materialise/styles directory.
Note: q-materialise is as a redesign of the qt‑material project— thanks to the UN‑GCPDS team.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file q_materialise-0.1.8.tar.gz.
File metadata
- Download URL: q_materialise-0.1.8.tar.gz
- Upload date:
- Size: 34.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
72c2e3e5e2bf49b893f2d92fd159c2368718782c983c97cf4973292a8e9d1ffb
|
|
| MD5 |
7c041d2ff3f7623692a2ebfc3a57a45b
|
|
| BLAKE2b-256 |
4f50b3e6197695228bee516afd69b41465dd140128b11c3ab2c0dab4c2d48857
|
File details
Details for the file q_materialise-0.1.8-py3-none-any.whl.
File metadata
- Download URL: q_materialise-0.1.8-py3-none-any.whl
- Upload date:
- Size: 42.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
53f07d6ae2b650bb42beebde49ef628ec596740e22017b93c1cd67161a37a843
|
|
| MD5 |
0be6fec36d75e49c554cdd3f52868059
|
|
| BLAKE2b-256 |
196aebc3498bb5e3c7ea6cce921e0c55891ff62423ef79712c85a520bfe57432
|