Construct an icon image in Tcl

Difference between version 1 and 3 - Previous - Next
Here's a script to build a plain Tk photo image that can be used e.g. as an icon for buttons or labels. It is painted with [<image> put] rectangles. To convert this into a file, you can serialize it to a base64-encoded string using the approach in [Serializing a photo].

The following example constructs a trash can icon image:


======
package require Tk

set img [image create photo -width 16 -height 16]
set black #000000

# handle (small nub on top):
$img put $black -to 6 0 10 2
# lid (wider bar):
$img put $black -to 2 2 14 4
# body outline: left wall, right wall, bottom:
$img put $black -to 3 4 5 15
$img put $black -to 11 4 13 15
$img put $black -to 3 13 13 15
# three vertical ridge lines inside the body, for a "trash can" read at small size:
$img put $black -to 6 6 7 12
$img put $black -to 8 6 9 12
$img put $black -to 10 6 11 12
your script
======
Here is how it looks like in ASCII art:

======
......XXXX......
......XXXX......
..XXXXXXXXXXXX..
..XXXXXXXXXXXX..
...XX......XX...
...XX......XX...
...XX.X.X.XXX...
...XX.X.X.XXX...
...XX.X.X.XXX...
...XX.X.X.XXX...
...XX.X.X.XXX...
...XX.X.X.XXX...
...XX......XX...
...XXXXXXXXXX...
...XXXXXXXXXX...
................
======
----
'''[TWu] - 2026-09-04 11:06:03'''

Clever trick! You do not need to declare a variable for "black" as it is a known color-name (see also Tk_GetColor C-function).<<br>>
With use of [expr] it is able to scale like SVG (only the lines will be thinner), or the image itself may be scaled. Thanks!