{"id":14982570,"url":"https://github.com/alexhuszagh/breezestylesheets","last_synced_at":"2025-05-15T09:09:24.552Z","repository":{"id":39665634,"uuid":"71071784","full_name":"Alexhuszagh/BreezeStyleSheets","owner":"Alexhuszagh","description":"Breeze/BreezeDark-like Qt StyleSheets ","archived":false,"fork":false,"pushed_at":"2025-03-10T01:33:21.000Z","size":43187,"stargazers_count":588,"open_issues_count":2,"forks_count":131,"subscribers_count":13,"default_branch":"main","last_synced_at":"2025-05-09T22:45:39.179Z","etag":null,"topics":["breeze-dark-theme","breeze-theme","pyqt5","pyqt6","qt","qt5","qt6","stylesheet"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Alexhuszagh.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-10-16T19:20:11.000Z","updated_at":"2025-04-28T13:52:57.000Z","dependencies_parsed_at":"2024-11-29T17:03:49.359Z","dependency_job_id":"b03a3138-4b08-477a-8119-02a668cdcacb","html_url":"https://github.com/Alexhuszagh/BreezeStyleSheets","commit_stats":{"total_commits":245,"total_committers":9,"mean_commits":27.22222222222222,"dds":0.05306122448979589,"last_synced_commit":"9f65c4c55bd65e73ca5f004e168819768cebfc7d"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alexhuszagh%2FBreezeStyleSheets","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alexhuszagh%2FBreezeStyleSheets/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alexhuszagh%2FBreezeStyleSheets/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alexhuszagh%2FBreezeStyleSheets/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Alexhuszagh","download_url":"https://codeload.github.com/Alexhuszagh/BreezeStyleSheets/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254310520,"owners_count":22049470,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["breeze-dark-theme","breeze-theme","pyqt5","pyqt6","qt","qt5","qt6","stylesheet"],"created_at":"2024-09-24T14:05:40.399Z","updated_at":"2025-05-15T09:09:19.544Z","avatar_url":"https://github.com/Alexhuszagh.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BreezeStyleSheets\n\nConfigurable Breeze and BreezeDark-like stylesheets for Qt Applications.\n\nBreezeStyleSheets is a set of beautiful light and dark stylesheets that render consistently across platforms, including high DPI screens. Each stylesheet is generated from a theme file and can be extended with a extension system, simplifying the generation custom stylesheets for your application. The stylesheets are comprehensively tested with most Qt widgets and widget properties, providing a consistent, stylish feel on any platform, including different operating systems, desktop environments, and Qt versions.\n\n**Table of Contents**\n\n1. [Gallery](#gallery)\n2. [Getting Started](#getting-started)\n    - [Building Styles](#building-styles)\n    - [Python Installation](#python-installation)\n    - [CMake Installation](#cmake-installation)\n    - [QMake Installation](#qmake-installation)\n    - [Qt Components](#qt-components)\n3. [Examples](#examples)\n4. [Features](#features)\n    - [Extensions](#extensions)\n5. [Customization](#customization)\n6. [Extending Stylesheets](#extending-stylesheets)\n7. [Debugging](#debugging)\n8. [Development Guide](#development-guide)\n    - [Git Hooks](#git-hooks)\n    - [Configuring Styles](#configuring-styles)\n    - [Testing](#testing)\n    - [Linting and Type Checks](#linting-and-type-checks)\n    - [Distribution Files](#distribution-files)\n    - [Git Ignore](#git-ignore)\n9. [Known Issues and Workarounds](#known-issues-and-workarounds)\n10. [License](#license)\n11. [Contributing](#contributing)\n12. [Acknowledgements](#acknowledgements)\n13. [Contact](#contact)\n\n## Gallery\n\n### Breeze/BreezeDark\n\nExample user interface using the Breeze and BreezeDark stylesheets side-by-side.\n\n\u003ctable cellspacing=\"0\" cellpadding=\"0\"\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./assets/Breeze Dark.gif\" alt=\"The dark stylesheet demo.\" \u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./assets/Breeze Light.gif\" alt=\"The light stylesheet demo.\" \u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n### Alternative themes\n\nChange QTableWidget hover behavior to highlight whole row, instead of individual cells.\nAlso changes background color of light themes to a light gray and applies theme color to radio buttons and checkboxes.\n\n\u003ctable cellspacing=\"0\" cellpadding=\"0\"\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./assets/dark-blue.png\" alt=\"Dark blue standard demo\" \u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./assets/dark-blue-alt.png\" alt=\"Dark blue alt demo\" \u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003ctable cellspacing=\"0\" cellpadding=\"0\"\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cimg src=\"./assets/light-blue.png\" alt=\"Light blue standard demo\" \u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"./assets/light-blue-alt.png\" alt=\"Light blue alt demo\" \u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\nFor an extensive view of screenshots of the theme, see the [gallery](assets/gallery.md).\n\n## Getting Started\n\nHere are detailed instructions on how to install Breeze Style Sheets for a variety of build systems and programming languages. This will require a Qt installation with QtCore, QtGui, QtWidgets, and QtSvg installed.\n\n### Building Styles\n\nBy default, BreezeStyleSheets comes with the `dark` and `light` themes pre-built in the [resources](/resources/) directory. In order to build all pre-packaged themes including PyQt5 and PyQt6 support, run:\n\n```bash\n# choose only the frameworks you want\nframeworks=(\"pyqt5\" \"pyqt6\" \"pyside2\" \"pyside6\")\nfor framework in \"${frameworks[@]}\"; do\n    python configure.py --styles=all --extensions=all --qt-framework \"${framework}\" \\\n        --resource breeze.qrc --compiled-resource \"breeze_${framework}.py\"\ndone\n```\n\nAll generated themes will be in the [dist](/dist) subdirectory, and the compiled Python resource(s) will be in `resources/breeze_{framework}.py` (for example, `resources/breeze_pyqt5.py`). Note that using the `--compiled-resource` flag requires the correct RCC to be installed for the Qt framework (see [Python Installation](#python-installation) for the required RCC).\n\n### Python Installation\n\nTo compile the stylesheet for use with PyQt5, PyQt6, PySide2 or PySide6, ensure you configure with the `--compiled-resource` flag (which requires the rcc executable for your chosen framework to be installed - see below for details). The compiled resource Python file now contains all the stylesheet data. To load and set the stylesheet in a PyQt5/6 or PySide2/6 application, import that file, load the contents using QFile and read the data. For example, to load BreezeDark, first configure using:\n\n```bash\npython configure.py --compiled-resource breeze_resources.py\n```\n\nThen load the stylesheet and run the application using:\n\n```python\nfrom PyQt5 import QtWidgets\nfrom PyQt5.QtCore import QFile, QTextStream\n# This must match the name of the file and be in the Python search path.\n# To modify the search path, add the directory containing the file to `sys.path`.\nimport breeze_resources\n\n\ndef main():\n    app = QtWidgets.QApplication(sys.argv)\n\n    # set stylesheet\n    file = QFile(\":/dark/stylesheet.qss\")\n    file.open(QFile.ReadOnly | QFile.Text)\n    stream = QTextStream(file)\n    app.setStyleSheet(stream.readAll())\n\n    # code goes here\n\n    app.exec_()\n```\n\nThe required Qt resource compilers (RCC) for each framework are:\n- PyQt5: `pyrcc5`\n- PyQt6: `pyside6-rcc` (requires `PySide6` installed)\n- PySide2: `pyside2-rcc` (requires Python.10 or earlier)\n- PySide6: `pyside6-rcc`\n\nYou can also use the pre-compiled resources in the [resources](/resources/) directory.\n\n### CMake Installation\n\nUsing CMake, you can download, configure, and compile the resources as part part of the build process. The following configurations are provided by @ruilvo. You can see a full example in [example](/example/cmake/). First, save the following as `breeze.cmake`.\n\n```cmake\n# Setup Qt: this works with both Qt5 and Qt6\n# NOTE: We use cached strings to specify the options for these.\nset(CMAKE_AUTOMOC ON)\nset(CMAKE_AUTORCC ON)\nset(CMAKE_AUTOUIC ON)\n\nfind_package(\n  ${QT_VERSION}\n  COMPONENTS Core Gui Widgets Svg\n  REQUIRED)\n# -------------------\n\n# Get Python to compile the stylesheets.\n# Fetch the repository, configure, compile the stylesheets.\nfind_package(Python COMPONENTS Interpreter)\n\ninclude(FetchContent)\n\nset(FETCHCONTENT_QUIET OFF CACHE BOOL \"Silence fetch content\" FORCE)\n\nFetchContent_Declare(\n  breeze_stylesheets\n  GIT_REPOSITORY https://github.com/Alexhuszagh/BreezeStyleSheets.git\n  GIT_TAG origin/main\n  GIT_PROGRESS ON\n  GIT_SHALLOW 1\n  USES_TERMINAL_DOWNLOAD TRUE)\n\nFetchContent_GetProperties(breeze_stylesheets)\nif(NOT breeze_stylesheets_POPULATED)\n  FetchContent_Populate(breeze_stylesheets)\n\n  add_library(breeze STATIC \"${breeze_stylesheets_SOURCE_DIR}/dist/breeze.qrc\")\n\n  add_custom_target(\n    run_python_breeze ALL\n    COMMAND ${Python_EXECUTABLE} configure.py --extensions=${BREEZE_EXTENSIONS}\n            --styles=${BREEZE_STYLES} --resource breeze.qrc\n    WORKING_DIRECTORY ${breeze_stylesheets_SOURCE_DIR}\n    BYPRODUCTS \"${breeze_stylesheets_SOURCE_DIR}/dist/breeze.qrc\"\n    COMMENT \"Generating themes\")\n\n  add_dependencies(breeze run_python_breeze)\nendif()\n```\n\nNext, make sure the path to `breeze.cmake` is in your module search [path](https://cgold.readthedocs.io/en/latest/tutorials/cmake-sources/includes.html), and add the following to your CMakeLists.txt:\n\n```cmake\nset(QT_VERSION Qt5 CACHE STRING \"The Qt version framework to use (Qt5 or Qt6).\")\nset(BREEZE_EXTENSIONS all CACHE STRING \"The extensions to include in our stylesheets.\")\nset(BREEZE_STYLES all CACHE STRING \"The styles to include in our stylesheets.\")\n\ninclude(breeze)\n\nadd_executable(myapp WIN32 MACOSX_BUNDLE \"main.cpp\")\ntarget_link_libraries(myapp PRIVATE Qt${QT_VERSION_MAJOR}::Widgets breeze)\n```\n\nAnd then in your application start point, add the following:\n\n```cpp\n#include \u003cQApplication\u003e\n#include \u003cQFile\u003e\n#include \u003cQTextStream\u003e\n\nint main(int argc, char *argv[])\n{\n    QApplication app(argc, argv);\n\n    // Need to initialize the resource, since we're using an external\n    // build system and this isn't automatically handled by CMake.\n    Q_INIT_RESOURCE(breeze);\n    QFile file(\":/dark/stylesheet.qss\");\n    file.open(QFile::ReadOnly | QFile::Text);\n    QTextStream stream(\u0026file);\n    app.setStyleSheet(stream.readAll());\n\n    // code goes here\n\n    return app.exec();\n}\n```\n\nIf you get an issue with copy relocations against a non-copyable protected [symbol](https://github.com/Alexhuszagh/BreezeStyleSheets/issues/121), ensure the `POSITION_INDEPENDENT_CODE` is set to `ON`. For the example above, add the following line:\n\n```cmake\nset_property(TARGET breeze PROPERTY POSITION_INDEPENDENT_CODE ON)\n```\n\n### QMake Installation\n\nCopy the contents of the `dist` subdirectory into your project directory and add the qrc file to your project file.\n\nFor example:\n\n```qmake\nTARGET = app\nSOURCES = main.cpp\nRESOURCES = breeze.qrc\n```\n\nTo load the stylesheet in C++, load the file using QFile and read the data. For example, to load BreezeDark, run:\n\n```cpp\n#include \u003cQApplication\u003e\n#include \u003cQFile\u003e\n#include \u003cQTextStream\u003e\n\n\nint main(int argc, char *argv[])\n{\n    QApplication app(argc, argv);\n\n    // set stylesheet\n    QFile file(\":/dark/stylesheet.qss\");\n    file.open(QFile::ReadOnly | QFile::Text);\n    QTextStream stream(\u0026file);\n    app.setStyleSheet(stream.readAll());\n\n    // code goes here\n\n    return app.exec();\n}\n```\n\n### Qt Components\n\nIf using a minimal installation of Qt, ensure [`QtSvg`](https://doc.qt.io/qt-6/qtsvg-index.html) is installed (along with [`QtCore`](https://doc.qt.io/qt-6/qtcore-index.html), [`QtGui`](https://doc.qt.io/qt-6/qtgui-index.html), and [`QtWidgets`](https://doc.qt.io/qt-6/qtwidgets-index.html)). SVG support is required to correctly display the widget icons.\n\n## Examples\n\nMany examples of widgets using [custom themes](/example/widgets.py), including with the [Advanced Docking System](/example/advanced-dock.py), [custom icons](/example/standard_icons.py), and [titlebars](/example/titlebar.py) can be found in the [example](/example/) directory.\n\nThe support stylesheets include:\n- `dark`\n- `light`\n- `auto`\n- `native` (the system native theme)\n\nAnd any `-purple`, `-green`, etc. variants can also be used. `auto` will automatically detect if the system theme is light or dark and select the correct theme accordingly. A recipe for a cross-platform way to detect the correct theme in Python or C++ is shown in our [System Theme Detection](/example/README.md#system-theme-detection).\n\n## Features\n\n- Complete stylesheet for all Qt widgets, including esoteric widgets like `QCalendarWidget`.\n- Customizable, beautiful light and dark themes.\n- Cross-platform icon packs for standard icons.\n- Extensible stylesheets: add your own extensions or rules and automatically configure them using the same configuration syntax.\n\n### Extensions\n\nThe supported extensions can be found in the [extensions](/extension/README.md) directory and include theme support for:\n- [Advanced Docking System](/extension/README.md#advanced-docking-system)\n- [QDockWidget Tooltips](/extension/README.md#qdockwidget-tooltips)\n- [Complete Standard Icon Set](/extension/README.md#standard-icons)\n\n## Customization\n\nIt's easy to design your own themes using `configure.py`. First, add the styles you want into [theme](/theme/), then run configure with a list of styles you want to include.\n\n### Theme\n\nHere is a sample theme, with the color descriptions annotated. Please note that although there are nearly 40 possibilities, for most applications, you should use less than 20, and ~10 different hues.\n\n```jsonc\n// NOTE: This is a custom JSON file, where lines leading\n// with `//` are removed. No other comments are valid.\n{\n    // Main foreground color.\n    \"foreground\": \"#eff0f1\",\n    // Lighter foreground color for selected items.\n    \"foreground-light\": \"#ffffff\",\n    // Main background color.\n    \"background\": \"#31363b\",\n    // Alternate background color for styles.\n    \"background:alternate\": \"#31363b\",\n    // Main color to highlight widgets, such as on hover events.\n    \"highlight\": \"#3daee9\",\n    // Color for selected widgets so hover events can change widget color.\n    \"highlight:dark\": \"#2a79a3\",\n    // Alternate highlight color for hovered widgets in QAbstractItemViews.\n    \"highlight:alternate\": \"#369cd1\",\n    // Main midtone color, such as for borders.\n    \"midtone\": \"#76797c\",\n    // Lighter color for midtones, such as for certain disabled widgets.\n    \"midtone:light\": \"#b0b0b0\",\n    // Darker midtone, such as for the background of QPushButton and QSlider.\n    \"midtone:dark\": \"#626568\",\n    // Lighter midtone for separator hover events.\n    \"midtone:hover\": \"#8a8d8f\",\n    // Color for checked widgets in QAbstractItemViews.\n    \"view:checked\": \"#334e5e\",\n    // Hover background color in QAbstractItemViews.\n    // This should be fairly transparent.\n    \"view:hover\": \"rgba(61, 173, 232, 0.1)\",\n    // Background for a horizontal QToolBar.\n    \"toolbar:horizontal:background\": \"#31363b\",\n    // Background for a vertical QToolBar.\n    \"toolbar:vertical:background\": \"#31363b\",\n    // Background color for the corner widget in a QAbstractItemView.\n    \"view:corner\": \"#31363b\",\n    // Border color between items in a QHeaderView.\n    \"view:header:border\": \"#76797c\",\n    // Background color for a QHeaderView.\n    \"view:header\": \"#31363b\",\n    // Border color Between items in a QAbstractItemView.\n    \"view:border\": \"#31363b\",\n    // Background for QAbstractItemViews.\n    \"view:background\": \"#1d2023\",\n    // Background for widgets with text input.\n    \"text:background\": \"#1d2023\",\n    // Background for the currently selected tab.\n    \"tab:background:selected\": \"#31363b\",\n    // Background for non-selected tabs.\n    \"tab:background\": \"#2c3034\",\n    // Color for the branch/arrow icons in a QTreeView.\n    \"tree\": \"#afafaf\",\n    // Color for the chunk of a QProgressBar, the active groove\n    // of a QSlider, and the border of a hovered QSlider handle.\n    \"slider:foreground\": \"#3daee9\",\n    // Background color for the handle of a QSlider.\n    \"slider:handle:background\": \"#1d2023\",\n    // Color for a disabled menubar/menu item.\n    \"menu:disabled\": \"#76797c\",\n    // Color for a checked/hovered QCheckBox or QRadioButton.\n    \"checkbox:light\": \"#58d3ff\",\n    // Color for a disabled or unchecked/unhovered QCheckBox or QRadioButton.\n    \"checkbox:disabled\": \"#c8c9ca\",\n    // Color for the handle of a scrollbar. Due to limitations of\n    // Qt stylesheets, any handle of a scrollbar must be treated\n    // like it's hovered.\n    \"scrollbar:hover\": \"#3daee9\",\n    // Background for a non-hovered scrollbar.\n    \"scrollbar:background\": \"#1d2023\",\n    // Background for a hovered scrollbar.\n    \"scrollbar:background:hover\": \"#76797c\",\n    // Default background for a QPushButton.\n    \"button:background\": \"#31363b\",\n    // Background for a pressed QPushButton.\n    \"button:background:pressed\": \"#454a4f\",\n    // Border for a non-hovered QPushButton.\n    \"button:border\": \"#76797c\",\n    // Background for a disabled QPushButton, or fallthrough\n    // for disabled QWidgets.\n    \"button:disabled\": \"#454545\",\n    // Color of a dock/tab close icon when hovered.\n    \"close:hover\": \"#b37979\",\n    // Color of a dock/tab close icon when pressed.\n    \"close:pressed\": \"#b33e3e\",\n    // Default background color for QDockWidget and title.\n    \"dock:background\": \"#31363b\",\n    // Color for the float icon for QDockWidgets.\n    \"dock:float\": \"#a2a2a2\",\n    // Background color for the QMessageBox critical icon.\n    \"critical\": \"#80404a\",\n    // Background color for the QMessageBox information icon.\n    \"information\": \"#406880\",\n    // Background color for the QMessageBox question icon.\n    \"question\": \"#634d80\",\n    // Background color for the QMessageBox warning icon.\n    \"warning\": \"#99995C\",\n    // These are extension-specific\n    // The background color for an Advanced Docking System Tab\n    \"ads-tab:focused\": \"rgba(61, 173, 232, 0.1)\",\n    \"ads-border:focused\": \"rgba(61, 173, 232, 0.15)\"\n}\n```\n\nOnce you've saved your custom theme, you can then build the stylesheet, icons, and resource file with:\n\n```bash\npython configure.py --styles=dark,light,\u003ccustom\u003e --resource custom.qrc\n```\n\nThen, you can use `custom.qrc`, along with the generated icons and stylesheets in each folder, in place of `breeze.qrc` for any style.\n\nThe `--styles` command flag takes a comma-separated list of values, or `all`, which will configure every theme present in the [themes](/theme) directory.\n\n#### Generating Colors\n\nAs a reference point, see the pre-generated [themes](/theme). In general, to create a good theme, modify only the highlight colors (blues, greens, purples) to a new color, such that the saturation and lightness stay the same (only the hue changes). For example, the color `rgba(51, 164, 223, 0.5)` becomes `rgba(164, 51, 223, 0.5)`.\n\n#### Adding Extensions\n\nWe also allow customizable extensions to extend the default stylesheets with additional style rules, using the colors defined in your theme. This also enables the integration of third-party Qt extensions/widgets into the generated stylesheets.\n\nFor example, to configure with extensions for the [Advanced Docking System](https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System), run:\n\n```bash\npython configure.py --extensions=advanced-docking-system --resource custom.qrc\n```\n\nLike with styles, `--extensions` takes a comma-separated list of values, or `all`, which will add every extension present in the [extensions](/extension) directory. For a detailed introduction to creating your own extensions, see the extensions [tutorial](/extension/README.md).\n\n## Extending Stylesheets\n\nThere are some limitations of using Qt stylesheets in general, which cannot be solved by stylesheets. To get more fine-grained style control, you should subclass `QCommonStyle`:\n\n```c++\nclass ApplicationStyle: public QCommonStyle\n{\n    ...\n}\n```\n\nThe limitations of stylesheets include:\n\n- Using custom standard icons.\n- Scaling icons with the theme size.\n- QToolButton cannot control the icon size without also affecting the arrow size.\n- Close and dock float icon sizes scale poorly with font size.\n\nFor an example of using QCommonStyle to override standard icons in a PyQt application, see [standard_icons.py](/example/standard_icons.py). An extensive reference can be found [here](https://doc.qt.io/qt-6/style-reference.html). A reference of QStyle, and the default styles Qt provides can be found [here](https://doc.qt.io/qt-6/qstyle.html).\n\n## Debugging\n\nHave an issue with the styles? Here's a few suggestions, prior to filing a bug report:\n- Modified the application font? Make sure you do **before** setting the application stylesheet.\n- Modified the application style? Make sure you do **after** you creating a `QApplication instance` but **before** you show the window or add widgets.\n\n## Development Guide\n\n### Git Hooks\n\nContributors to BreezeStylesheets should make use of [vcs](/vcs.py) and [scripts](/scripts/) to both install Git hooks and run local tests and typechecking. After cloning the repository, developers should first install a pre-commit hook, to ensure their code is formatted and linted prior to commiting:\n\n```bash\npython vcs.py --install-hooks\n```\n\n### Configuring Styles\n\nTo configure the assets and the stylesheets, run `python configure.py`. To compile the assets and stylesheets for PyQt5, ensure `pyrcc5` is installed (for other frameworks, see [Python Installation](#python-installation) for the correct RCC) and run:\n\n```bash\npython configure.py --compiled-resource breeze_resources.py\n```\n\n### Testing\n\nThe unittest suite is [ui.py](test/ui.py). By default, the suite runs every test, so to test changes to a specific widget, pass the `--widget $widget` flag. To test other configurations, see the options for `--stylesheet`, `--widget`, `--font-size`, and `--font-family`, and then run the tests with the complete UI in [widgets.py](/example/widgets.py). If the widget you fixed the style for does not exist in the test suite or [widgets.py](/example/widgets.py), please add it.\n\n```bash\n# Test all widgets\n$ python test/ui.py --stylesheet $theme\n# Test only a single widget.\n$ python test/ui.py --widget $widget --stylesheet $theme\n# Get the help options.\n$ python test/ui.py --help\nusage: ui.py [-h] [--stylesheet STYLESHEET] [--style STYLE] [--font-size FONT_SIZE] [--font-family FONT_FAMILY]\n             [--scale SCALE] [--qt-framework {pyqt5,pyqt6,pyside2,pyside6}] [--use-x11] [--widget WIDGET]\n             [--width WIDTH] [--height HEIGHT] [--alignment ALIGNMENT] [--compress] [--print-tests] [--start START]\n\nConfigurations for the Qt5 application.\n\noptions:\n  -h, --help            show this help message and exit\n  --stylesheet STYLESHEET\n                        stylesheet name (`dark`, `light`, `native`, ...)\n  --style STYLE         application style (`Fusion`, `Windows`, `native`, ...)\n  --font-size FONT_SIZE\n                        font size for the application\n  --font-family FONT_FAMILY\n                        the font family\n  --scale SCALE         scale factor for the UI\n  --qt-framework {pyqt5,pyqt6,pyside2,pyside6}\n                        target framework to build for. Default = pyqt5. Note: building for PyQt6 requires PySide6-rcc\n                        to be installed.\n  --use-x11             force the use of x11 on compatible systems.\n  --widget WIDGET       widget to test. can provide `all` to test all widgets\n  --width WIDTH         the window width\n  --height HEIGHT       the window height\n  --alignment ALIGNMENT\n                        the layout alignment\n  --compress            add stretch on both sides\n  --print-tests         print all available tests (widget names).\n  --start START         test widget to start at.\n# Get a complete list of available tests.\n$ python test/ui.py --print-tests\naero_wizard\nall_focus_tree\nalpha_colordialog\n...\nwizard\nyes_button\n```\n\nTo see the complete list of Qt widgets covered by the unittests, see [Test Coverage](Test%20Coverage.md).\n\n### Linting and Type Checks\n\nYou can check code quality using static typecheckers and code linters.\n\n```bash\n# format python code to a standard style.\n# requires `black` and `isort` to be installed.\nscripts/fmt.sh\n# run linters and static typecheckers\n# requires `pylint`, `pyright`, and `flake8` to be installed\nscripts/lint.sh\n# check if the system can automatically determine the theme\n# on windows, this requires `winrt-Windows.UI.ViewManagement`\n# and `winrt-Windows.UI` to be installed.\nscripts/theme.sh\n# run more involved, comprehensive tests. these assume a Linux\n# environment and detail the install scripts to use them.\nscripts/cmake.sh\nscripts/headless.sh\n```\n\n### Distribution Files\n\nWhen pushing changes, only the `light` and `dark` themes should be configured, without any extensions. To reset the built resource files to the defaults (this requires the correct RCC to be installed), run:\n\n```bash\npython configure.py --clean \\\n    --compiled-resource breeze_resources.py\n```\n\nIf no changes are being made to the icons or stylesheets, you may want to ensure that the `dist` directory is assumed to be unchanged in git, no longer tracking changes to these files. You can turn tracking distribution files off with:\n\n```bash\npython vcs.py --no-track-dist\n```\n\nTo turn back on tracking, run:\n\n```bash\npython vcs.py --track-dist\n```\n\n### Git Ignore\n\nNote that the `.gitignore` is auto-generated via `vcs.py`, and the scripts to track or untrack distribution files turn off `.gitignore` tracking. Any changes should be made in `vcs.py`, and ensure that `.gitignore` is tracked, and commit any changes:\n\n```bash\npython vcs.py --track-gitignore\ngit add .gitignore\ngit commit -m \"...\"\n```\n\n## Known Issues and Workarounds\n\nFor known issues and workarounds, see [issues](/ISSUES.md).\n\n## License\n\nMIT, see [license](/LICENSE.md).\n\n## Contributing\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in BreezeStyleSheets by you shall be licensed under the MIT license without any additional terms or conditions. See the [changelog](/CHANGELOG.md) for changes and contributors to the project.\n\n## Acknowledgements\n\nBreezeStyleSheets is a fork of [QDarkStyleSheet](https://github.com/ColinDuquesnoy/QDarkStyleSheet). Some of the icons are modified from [Material UI](https://github.com/google/material-design-icons) and [Material Design Icons](https://materialdesignicons.com/) (both of which use an Apache 2.0 [license](/MaterialUi.LICENSE)), and are redistributed under the MIT license.\n\nMajor contributions to the project have been made by:\n- [Inverted-E](https://github.com/Inverted-E/)\n\n## Contact\n\nEmail: [ahuszagh@gmail.com](mailto:ahuszagh@gmail.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexhuszagh%2Fbreezestylesheets","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexhuszagh%2Fbreezestylesheets","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexhuszagh%2Fbreezestylesheets/lists"}