Photoshop-style color picker for CustomTkinter — sat/val square, HSL lightness slider, hue slider, hex input, tint strip, and persistent saved colors
Project description
ctk-color-picker
A modern, Photoshop-style color picker dialog for CustomTkinter. One function call, one hex string back.
Pure Python + Pillow. DPI-aware. Modal dialog. Works on Windows, macOS, Linux.
Features
- 🎨 Saturation × Value square (drag to pick)
- 💡 HSL Lightness slider (black → color → white)
- 🌈 Hue slider
- 🔤 Hex input field
- 👀 Old / New comparison swatches
- 🎭 Tint strip — 13 dynamic variations of the current color
- 💾 Saved Colors — 20 slots, persistent across sessions (JSON)
- ⭐ Selection highlight on saved swatch matching current pick
- 🖥️ DPI-aware
tk.Canvas— matches CTk widget scaling
Requirements
| Python | 3.10+ |
| customtkinter | 5.2.2+ |
| Pillow | 10.0.0+ |
tkinter ships with Python on Windows/macOS. On Linux: sudo apt install python3-tk.
Install
git clone https://github.com/kandelucky/ctk-color-picker.git
cd ctk-color-picker
pip install -e .
(pip install -e . installs the package in editable mode and pulls in customtkinter + Pillow automatically.)
PyPI release coming soon:
pip install ctk-color-picker
Quick start
import customtkinter as ctk
from ctk_color_picker import askcolor
ctk.set_appearance_mode("dark")
app = ctk.CTk()
app.geometry("300x200")
def on_pick():
color = askcolor(app, initial="#1f6aa5")
if color:
button.configure(fg_color=color)
button = ctk.CTkButton(app, text="Pick a color", command=on_pick)
button.pack(expand=True, padx=20, pady=20)
app.mainloop()
askcolor() opens the modal dialog, blocks until closed, and returns a hex string or None if cancelled.
API
askcolor(master, initial="#1f6aa5", history=None, title="Color Picker") -> str | None
Convenience function. Opens the dialog modally and returns the picked hex.
ColorPickerDialog(master, initial_color="#1f6aa5", history=None, title="Color Picker")
The dialog class. Use directly when you need more control:
dialog = ColorPickerDialog(parent, initial_color="#ff0000")
dialog.wait_window()
print(dialog.result) # hex string or None
ColorHistory(path=None, max_entries=20)
Manages persistent saved colors as a JSON file. Default path is ~/.ctk_color_picker/colors.json. Pass to the dialog for custom storage.
palette = ColorHistory(path="./project_palette.json", max_entries=30)
color = askcolor(app, history=palette)
Methods: .add(hex), .all(), .clear().
When to use this
Reach for ctk-color-picker when you want:
- A themed picker that matches the rest of your CustomTkinter app
- Saturation × value picking plus a separate HSL lightness control
- A tint strip of the current color for quick shade tweaks
- A persistent saved-colors palette shared across sessions
- A screen eyedropper that samples any pixel with a single click
- DPI-aware rendering on high-resolution Windows displays
Reach for tkinter.colorchooser instead if you just need the OS native dialog with zero setup and no extra dependencies.
Troubleshooting
ModuleNotFoundError: No module named 'ctk_color_picker' — run pip install -e . from the repo root, or copy the ctk_color_picker/ folder next to your script.
Dialog tiny / blurry on a 4K display — make sure customtkinter ≥ 5.2.2.
Saved colors don't persist — check that ~/.ctk_color_picker/ is writable.
License
MIT © 2026 kandelucky
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 ctk_tint_color_picker-0.3.0.tar.gz.
File metadata
- Download URL: ctk_tint_color_picker-0.3.0.tar.gz
- Upload date:
- Size: 19.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
95ea73edf534eef348043d115e06cf1ca842743938c6d09b3365b34f3ecbba8a
|
|
| MD5 |
261c2052a16084ff0651b4d3919dc658
|
|
| BLAKE2b-256 |
5d0d8587a5e44c85e57398af0520ced452239f9bbc72ad062ae84acb200ecca7
|
File details
Details for the file ctk_tint_color_picker-0.3.0-py3-none-any.whl.
File metadata
- Download URL: ctk_tint_color_picker-0.3.0-py3-none-any.whl
- Upload date:
- Size: 16.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bc988b56cf39e9dfe411669d919f4b44992454dcb3a89606643313677e5cec57
|
|
| MD5 |
00e9228156838fa3ec7aa83190adab81
|
|
| BLAKE2b-256 |
8465d06a5654d2db9b80c3e4b43b38ac82654a2509566fbe2c7bb20a6f9782a8
|