Metadata-Version: 2.1
Name: Comel
Version: 0.1.3
Summary: Opinionated PySide6 Light/Dark Theme Toggler.
Home-page: https://github.com/hueyyeng/Comel
Author: Huey Yeng
Author-email: huey.yeng.mmu@gmail.com
Maintainer: Huey Yeng
Maintainer-email: huey.yeng.mmu@gmail.com
License: UNKNOWN
Keywords: python,library,qt,widgets,development
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.7
Classifier: Operating System :: MacOS
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: Microsoft :: Windows :: Windows 10
Requires-Python: >=3.7
Description-Content-Type: text/markdown
Requires-Dist: darkdetect
Requires-Dist: PySide6

# Comel

Opinionated PySide6 Light/Dark Theme Toggler. Oh wait yet another ~~Qt for Python~~ PySide6 light/dark theme package? Yes it is!

![](docs/images/comel_takusan.gif)

> **ATTENTION:** This package is designed with writing/deploying standalone PySide6 application in mind.

## Features

1. Custom QMainWindow widget with built-in light/dark mode toggler. Connect the `toggle_theme` function to QtWidgets callback function and you're done.
2. No icons handling! ~~I'm actually lazy~~ I decided that icons should be the responsibility of the developer.
3. Very simple package (for now). Not bloated from trying to cater various Qt for Python packages.

## Getting Started

Last tested with **Python 3.8.10** but any Python version that PySide6 supports. Highly recommend using virtual environment when testing/implementing this.

### Install using pip

```shell
pip install Comel
```

### Cloning this repo

Clone this repo and copy the `comel` package into your project. Ensure both `darkdetect` and `PySide6` is installed in your Python environment. 

## Usage

Import `ComelMainWindowWrapper` class and connect `toggle_theme` to a widget action. That's it!

Refer to examples directory for `barebone_app.py` for boilerplate code or `takusan_app.py` for a typical PySide app written from scratch without using Qt Designer.

## Examples

```shell
# Barebone app
python examples/barebone_app.py

# Takusan app
python examples/takusan_app.py
```

## Customizing Qt Style Sheets (QSS)

> Refer to https://doc.qt.io/qt-6/stylesheet-examples.html for examples on the correct CSS selectors. Search on Stack Overflow/Qt Forum/etc if you cannot find the specific CSS selectors.

1. Edit `base.qss` and `presets.py` with the relevant variable and color.
2. Run `generate_qss.py` to generate `light.qss` and `dark.qss` located in `qss/themes` and `comel/themes` folder.

## Known Issues

1. The default Qt arrow icons does not play nicely when using Qt Style Sheets. While there is a way to bundle custom icons, I'm not fancy with the extra steps needed to compile Qt `.qrc` into Python file. I might create wrapper class for the affected widgets in future updates.

## Why Comel?

![](examples/icons/icons8-fat-cat-96.png)

Qt is pronounced as "cute". Comel means **cute** in Bahasa Melayu aka Malay language. Also, the name of my childhood cat.

## Credits

- Uses [darkdetect](https://github.com/albertosottile/darkdetect) for detecting the operating system dark mode.
- Uses icons from [Icons8](https://icons8.com).
- Special thanks to [izzthedude](https://github.com/izzthedude) for experimenting with this idea.


