OUJOOD.COM
Le module tkinter.colorchooser contient une seule fonction : askcolor(). Elle ouvre le sélecteur de couleur natif de la plateforme — la roue chromatique macOS, le sélecteur Windows ou la boîte de couleur GTK sous Linux — et retourne la couleur choisie sous deux formats simultanément.
Utilisation de base
import tkinter as tk
from tkinter import colorchooser
fenetre = tk.Tk()
fenetre.title("Sélecteur de couleur")
fenetre.geometry("360x180")
def choisir_couleur():
# askcolor() retourne ((r, g, b), '#rrggbb') ou (None, None) si annulation
resultat = colorchooser.askcolor(
title="Choisissez une couleur",
color="#3498db" # couleur présélectionnée à l'ouverture
)
rgb, hex_val = resultat
if hex_val: # None si l'utilisateur annule
apercu.config(bg=hex_val)
label_hex.config(text=f"Hex : {hex_val}")
label_rgb.config(text=f"RGB : {int(rgb[0])}, {int(rgb[1])}, {int(rgb[2])}")
tk.Button(fenetre, text="Choisir une couleur", command=choisir_couleur).pack(pady=15)
apercu = tk.Label(fenetre, text=" ", bg="#3498db", width=10, height=2)
apercu.pack()
label_hex = tk.Label(fenetre, text="Hex : #3498db")
label_hex.pack(pady=4)
label_rgb = tk.Label(fenetre, text="RGB : 52, 152, 219")
label_rgb.pack()
fenetre.mainloop()
askcolor() retourne un tuple ((r, g, b), '#rrggbb'). Les composantes RGB sont des flottants — il faut les convertir avec int() pour obtenir des entiers. Si l'utilisateur ferme la boîte sans choisir, le retour est (None, None) — toujours vérifier hex_val avant de l'utiliser.
Appliquer la couleur à plusieurs widgets
Un cas d'usage courant : permettre à l'utilisateur de personnaliser les couleurs de l'interface :
import tkinter as tk
from tkinter import colorchooser
fenetre = tk.Tk()
fenetre.title("Personnalisation")
fenetre.geometry("400x260")
couleurs = {
"Fond": tk.StringVar(value="#ffffff"),
"Texte": tk.StringVar(value="#212121"),
"Accent": tk.StringVar(value="#1565c0"),
}
def choisir(nom_couleur):
var = couleurs[nom_couleur]
resultat = colorchooser.askcolor(color=var.get(), title=f"Couleur — {nom_couleur}")
_, hex_val = resultat
if hex_val:
var.set(hex_val)
appliquer_theme()
def appliquer_theme():
fond = couleurs["Fond"].get()
texte = couleurs["Texte"].get()
accent = couleurs["Accent"].get()
fenetre.configure(bg=fond)
label_demo.configure(bg=fond, fg=texte)
frame_btns.configure(bg=fond)
for btn in btns_couleur:
btn.configure(bg=fond)
frame_btns = tk.Frame(fenetre)
frame_btns.pack(pady=15)
btns_couleur = []
for nom in couleurs:
btn = tk.Button(
frame_btns,
text=f"Couleur {nom}",
command=lambda n=nom: choisir(n),
width=16
)
btn.pack(pady=3)
btns_couleur.append(btn)
label_demo = tk.Label(
fenetre,
text="Aperçu du thème personnalisé",
font=("Arial", 12),
pady=15
)
label_demo.pack(fill="x")
appliquer_theme()
fenetre.mainloop()
On stocke les couleurs dans des StringVar pour pouvoir les lire et les modifier facilement depuis n'importe quelle partie du code. Le lambda n=nom fixe la valeur de nom au moment de la création du bouton — sans ça, tous les boutons utiliseraient la dernière valeur de la boucle.
Pour une personnalisation encore plus poussée, le widget Scale en triple (RVB) décrit dans sa page respective est une alternative sans boîte de dialogue. Les deux approches peuvent coexister dans la même interface.
Par carabde | Mis à jour le 30 avril 2025