Colores en tkinter¶
Seleccionar color de fondo¶
Vamos a crear un panel cuyo color de fondo pueda cambiarse a voluntad. El color seleccionado se mostrará en la barra de título:

El color se muestra en forma de códigos. En el ejemplo, un color azulado se muestra como:
( (166,253,255) , '#a6fdff' )
Códigos de colores¶
¿Que significan los códigos? Todo color es una combinación de tres básicos, rojo, verde y azul. A este esquema se le llama RGB, abreviatura de red, green, blue. La cantidad que pongamos de cada color básico determina el color final, y se expresa en forma de tupla:
(166,253,255)
Los valores individuales van de 0 a 255. Con esto tenemos 256 posibles tonalidades para cada color básico, lo que hace más de dieciséis millones de combinaciones, suficiente para mostrar una amplia gama de colores.
En Tkinter, los colores se expresan mediante una tupla de dos elementos:
- una tupla anidada con los tres colores básicos:
(166,253,255) -
un string formado por seis dígitos hexadecimales, dos por cada color básico:
'#a6fdff':- 166 es la cantidad de rojo, en hexadecimal, A6
- 253 es la cantidad de verde, en hexadecimal, FD
- 255 es la cantidad de azul, en hexadecimal, FF
El conjunto lleva el prefijo
#, y lo podemos escribir en minúsculas.
Veamos varios ejemplos de colores:
| Color | Rojo | Verde | Azul | Código hex | |
|---|---|---|---|---|---|
| rojo | 255 | 0 | 0 | #FF0000 |
|
| verde | 0 | 255 | 0 | #00FF00 |
|
| azul | 0 | 0 | 255 | #0000FF |
|
| amarillo | 255 | 255 | 0 | #FFFF00 |
|
| cian | 0 | 255 | 255 | #00FFFF |
|
| fucsia | 255 | 0 | 255 | #FF00FF |
|
| negro | 0 | 0 | 0 | #000000 |
|
| gris | 128 | 128 | 128 | #808080 |
|
| gris claro | 192 | 192 | 192 | #C0C0C0 |
|
| blanco | 255 | 255 | 255 | #FFFFFF |
|
| marrón | 128 | 0 | 0 | #800000 |
|
| verde oscuro | 0 | 128 | 0 | #008000 |
|
| azul oscuro | 0 | 0 | 128 | #000080 |
|
| dorado | 128 | 128 | 0 | #808000 |
|
| púrpura | 128 | 0 | 128 | #800080 |
|
| verde azulado | 0 | 128 | 128 | #008080 |
Poniendo las mismas cantidades de color para cada uno de los básicos, vamos de (0,0,0) a (255,255,255), con lo que obtenemos una gama de 256 grises.
El programa¶
Nuestro programa es el siguiente:
| SeleccionarColor.py | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |
Explicación del programa¶
Hemos creado dos botones y un marco para alojarlos:
panelBotones = Frame(ventana)
btnTerminar=Button(panelBotones)
btnColores=Button(panelBotones)
Los botones se "empaquetan" dejando el anterior a su izquierda. Por defecto, se situarían en vertical:
btnTerminar.pack(side='left')
El botón para cambiar el color, invoca una función llamada cambiar_color().
Como de costumbre, la especificamos sin paréntesis para evitar que se ejecute
y se asigne el resultado.
btnColores.configure(command=cambiar_color)
La sentencia:
from tkinter import colorchooser
importa un submódulo de Tkinter. Dentro de una biblioteca puede haber varios módulos.
La sentencia:
color=colorchooser.askcolor()
Muestra una ventana para seleccionar colores, y devuelve una tupla de dos elementos. El primero es, a su vez, una tupla con los tres colores básicos, rojo, verde y azul, como ya hemos visto. El segundo elemento de la tupla es el string que tenemos que asignar:
lienzo.configure(bg=color[1])
Nombres de colores¶
En tkinter podemos usar códigos de color o nombres de colores:
lienzo.configure(bg='white')
lienzo.configure(bg='#FFFFFF')
Podemos averiguar el código que se corresponde con cada nombre examinando la documentación de la biblioteca Tk:
https://www.tcl-lang.org/man/tcl/TkCmd/colors.html
Podemos obtener una paleta de colores con un programa que he encontrado navegando por Internet:

El programa es el siguiente:
| Tk_paleta.py | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | |