TintKit
A small, themeable tkinter UI kit — a dark/light photo-tool look as reusable controls. One theme drives every colour, widgets reuse each other, and the look switches live with no restart.
Run the gallery
python gallery.py
Every component in one scrollable window, with a live Dark / Light + accent switcher at the top — the whole window repaints instantly. (The handlers are demos; the controls themselves are genuinely interactive.)
Install
pip install tintkit # the kit — zero required dependencies
pip install "tintkit[icons]" # + Pillow, to recolour the Lucide icons
Pure-stdlib tkinter — no required dependencies. The [icons] extra adds
Pillow to recolour the bundled
Lucide icons; without it widgets still work and shapes
stay anti-aliased (drawn in pure Tk) — only the glyphs are skipped. Point at your
own icons with set_icon_dir("…/my_icons").
Use it
import tkinter as tk
from tintkit import Theme, setup_dpi, Button, Toggle
root = tk.Tk()
setup_dpi(root) # crisp icons on high-DPI screens
# importing tintkit also fixes non-Latin keyboard input on Windows (see below)
theme = Theme(scheme="dark", accent="#8fae9b")
Button(root, theme, "Save", icon="save", command=lambda: print("saved")).pack()
Toggle(root, theme, value=True, command=lambda on: print(on)).pack()
root.mainloop()
Every widget takes the same first two args — the parent and the shared theme —
and returns an object you .pack() / .grid() like any tk widget. One theme is
the single source of truth; change it and the whole tree repaints:
theme.set(scheme="light") # dark <-> light
theme.set(accent="#c08457") # any accent; shades derived for you
theme.toggle_scheme()
Read any token anywhere with theme["accent"], theme["panel"],
theme["r_control"] …
What's inside
| module | what it holds |
|---|---|
tintkit/theme.py |
dark/light schemes, accent + danger/warn derivation, repaint observer |
tintkit/icons.py |
the Lucide icon loader (recoloured per theme) |
tintkit/primitives.py |
rounded_rect, the CanvasControl base, themed Surface / Label / Dot |
tintkit/controls.py |
Button, Slider, Toggle, Radio, Checkbox, SegmentedTabs, Dropdown, Badge, Tag, ProgressBar, Tooltip, TextField |
tintkit/containers.py |
Card, dialog, callout, section header, drag sashes, scrollbar |
tintkit/composites.py |
toolbar, tool rail, folder nav + tree, selection views, settings window |
tintkit/keyboard.py |
non-Latin keyboard fix on Windows (Georgian, Greek, Thai, Arabic, …): real typing + Ctrl-C/V/X/A + right-click menu, auto-installed on import |
gallery.py |
the style guide window + live switcher |
Design rules: no widget hard-codes a colour (each reads theme[...] and
repaints on change); one radius scale — r_control / r_pill / r_card, no
magic numbers; widgets reuse widgets; all glyphs are
Lucide PNGs (ISC) recoloured at load.
License
MIT — see LICENSE.
Metadata
Release files for tintkit 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| tintkit-0.3.1.tar.gz | 75.8 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tintkit-0.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 156.7 kB
Release files / tintkit-0.3.1.tar.gz
| Download URL | tintkit-0.3.1.tar.gz |
|---|---|
| Size | 75.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d159073d39093860047c3abac337e31408c09866f7979ef282c404360c91f470
|
|
BLAKE2b-256 checksum How to use checksums |
de96c3efb5b60c45355cac4336b039eb40d17bb2bdc86b49a0e3f1ee52d80f70
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.4
|
Release files / tintkit-0.3.1-py3-none-any.whl
| Download URL | tintkit-0.3.1-py3-none-any.whl |
|---|---|
| Size | 80.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
39931dfc39cf142567c91a4969e180f3a56e10f6cfb937ad7833d71f56f62c3e
|
|
BLAKE2b-256 checksum How to use checksums |
883527c2874f5aa14473a2c92c27acae77909c5dd4b8b41486b5af6b827acc78
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.4
|
Security for tintkit 0.3.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.