Skip to main content

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.

Python License UI

TintKit — dark theme TintKit — light theme

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)

Source distribution for tintkit 0.3.1
File Size Uploaded Provenance
tintkit-0.3.1.tar.gz 75.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for tintkit 0.3.1
File Interpreter ABI Platform
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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page