English | 繁體中文
PyQt6 Dynamic Icon Theme Toolkit — Support automatic light/dark theme switching for SVG icons, with customizable color effects.
- SVG Dynamic Recoloring — Automatically strips original fill/stroke and applies any custom color
- Theme Awareness — Automatically switches between black (light theme) and white (dark theme) when no custom color is set
- Hover Effect — Switches icon color on mouse enter/leave
- PNG / JPG Support — Renders raster images at any size while preserving original colors
- Caching — Icons are cached by
(name, color, size, keep_original)to avoid redundant rendering
pip install pyqt6-icon-themeImport the library:
from pyqt6_icon_theme import IconManager, IconButtonSet the icon directory (supports .svg, .png, .jpg, .jpeg); the path name is customizable:
IconManager.set_icon_dir("icons")- 1st parameter: icon file name — extension is optional
- 2nd parameter: icon size in pixels
- 3rd parameter: icon color in normal state — if
None, the color is automatically detected from the window background (black on light, white on dark) - 4th parameter: icon color on hover — if
None, no color change on hover - 5th parameter: preserve the SVG's original colors — if
True,normal_colorandhover_colorare ignored; defaults toFalse
IconButton(name, size=16, normal_color=None, hover_color=None, keep_original=False)# Auto color based on theme (light = black, dark = white)
btn = IconButton("user.svg", size=30)
# Custom color + hover effect
btn = IconButton("add.svg", size=36, normal_color="#49ADF0", hover_color="#F08884")
# Preserve SVG original colors (unaffected by theme)
btn = IconButton("edit.svg", size=40, keep_original=True)
# PNG/JPG — always displays original colors
btn = IconButton("delete.png", size=40)See the example folder.
| Scenario | normal_color |
hover_color |
keep_original |
Result |
|---|---|---|---|---|
| SVG, no color specified | None |
None |
False |
Follows theme (black/white) |
| SVG, custom color | "#49ADF0" |
"#F08884" |
False |
Custom color + hover |
| SVG, original colors | — | — | True |
SVG rendered as-is |
| PNG / JPG | ignored | ignored | ignored | Always original colors |
your_project/
├── icons/
│ ├── user.svg
│ ├── add.svg
│ ├── edit.svg
│ └── delete.png
└── main.py
All .svg, .png, .jpg, .jpeg files in the directory are loaded automatically.
MIT © JW5123