Every name you can pass to a Tkinter widget, with the hex value it maps to. There are 658 of them.
Tk accepts a colour either as a name or as a hex string. Both of these do the same thing:
tk.Label(root, background="steelblue")
tk.Label(root, background="#4682b4")
The names come from the X11 colour database, which is why they are the same ones you see in old X applications and in CSS. Names are not case sensitive, and the spelling gray and grey both work throughout.
Most named colours have four numbered versions, from 1 for the lightest to 4 for the darkest. red1 through red4, and so on. Useful when you want a shade of something without picking hex values by hand.
There are 101 greys, from gray0 which is black to gray100 which is white, each one a percentage of brightness. Handy for building a set of tones that step evenly.
print(root.winfo_rgb("steelblue"))
This returns the colour as three 16 bit values, so steelblue comes back as (17990, 33410, 46260). Divide each by 257 to get the usual 0 to 255 numbers.
Passing an unknown name raises TclError: unknown color name. There is no silent fallback, so a typo stops the program rather than quietly drawing the wrong colour.
Pillow understands these names too, through ImageColor:
from PIL import Image, ImageColor
print(ImageColor.getrgb("steelblue"))
im = Image.new("RGB", (100, 100), "steelblue")
That makes it easy to keep a Tkinter interface and the images it generates on the same palette. To pull colours out of a picture instead, see the palette tool.