tkinter-icons#
Font-based icons for Tkinter — 61,000+ icons across sixteen sets, one import, no image files to manage.
Copy this and run it:
import tkinter as tk
from tkinter import ttk
from tkinter_icons import MaterialIcon
root = tk.Tk()
home = MaterialIcon("home", size=24, color="#0F766E")
ttk.Button(root, text="Home", image=home.image, compound="left").pack(padx=20, pady=20)
root.mainloop()
An icon is a glyph from an icon font, rendered to a Tk image at the size and color you ask for. Nothing is loaded from disk at import time, nothing is drawn until you use it, and identical icons share one image.
Install a pack, not a library#
One line puts a full icon set in your project:
pip install "tkinter-icons[material]"
That is the whole model: one library, sixteen installable icon packs. Name the extra, import from tkinter_icons, and the distribution names never come up — the base package is the renderer, and the glyphs come from the pack you named. Icon packs compares the sixteen.
What you get#
Material, Font Awesome, Lucide, Bootstrap, Simple Icons, weather symbols, developer logos, fantasy glyphs. Every pack’s class takes the same (name, size, color, style), so switching sets is a one-line change.
Glyphs are centered on their measured ink rather than on the font’s own bounding box, which under-reports it. Odd sizes snap even, small sizes render oversampled and downscale with a light sharpen.
Size and color are arguments, not files. No icons/ directory, no @2x duplicates, no second set for dark mode — ask for 16px grey and 32px teal from the same glyph.
Map an icon onto a widget and its tint follows that widget’s per-state foreground — hover, pressed, disabled — and re-renders itself when the theme changes.
Coming from ttkbootstrap-icons? Your existing code keeps working — Migrating from ttkbootstrap-icons is a five-minute read.