[Tutoriel] : Affichage des couleurs et leur noms avec Python et Tkinter


Dans ce billet on va explorer ensemble un exemple d'un programme crée avec Python en utilisant le module Tkinter (nommé aussi : Tk) qui est l'interface standard de la boite à outils Tk GUI de la langage de programmation Python .
Ce tutoriel consiste à créer un GUI permettant la saisie d'un couleur à afficher dans un rectangle. Les couleurs doivent êtres écrites comme suit : [Black, Brown, Red, Orange, Yellow, Green, Blue, Purple, Grey, White]. Le programme sera sensible aux majuscules et en cas de mauvaise saisie, un message d'erreur s'affichera et  indiquera qu'on doit appuyez sur la touche 'R' ou 'r' pour relancer la saisie.
Assez parler, voilà une présentation du programme (format .gif) et  le code documenté :



#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Auteur : Chiheb
# Licence : Free Licence

######### Affichage des couleurs + leurs noms ###########

class Application (object) :

def __init__ (self) :
"Constructeur de la fenêtre principale"
# Initialisation de Tkinter()
self.root = Tk()
# Texte de la fenêtre principale
self.root.title ('Affichage des couleurs')
# Appel de la fontion dessineCadre() de la classe Application()
self.dessineCadre()
# Création d'un Label()
Label(self.root,text = "Entrer le nom du couleur : ").grid(row=2,column=1,columnspan=3)
# Création du premier boutton
Button(self.root,text='Montrer',command = self.changeCouleur).grid(row=3,column=1)
# Création du deuxième boutton
Button(self.root,text='Quitter',command = self.root.quit).grid(row=3,column=3)
# Création d'une espace de saisie de type Entry
self.entree = Entry(self.root,width=14)
self.entree.grid(row=3,column=2)
# Listes des couleurs
self.cc = ['Black','Brown','Red','Orange','Yellow','Green','Blue','Purple','Grey','White']
# Boucle pincipale

self.root.mainloop()

def dessineCadre (self) :

"Canvas avec un text box au milieu indiquant la couleur"
# Création du Canvas de l'instance self.root avec une largeur = 250, hauteur = 100
# et couleur de l'arière plan = ivory
self.can = Canvas(self.root,width= 250, height = 100, bg='ivory')
# Le Vanvas crée possède une seule ligne (row=1) et une seule colonne (column=1)
# L'espacement de la colonne est de l'ordre de 3
# padx = Remplissage facultatif autour d'une widget dans une cellule
# pady = Sa valeur par défaut est 1
self.can.grid(row=1,column=1,columnspan=3,pady=5,padx=5)
# Création d'un rectangle
self.can.create_rectangle(65,30,185,70,fill='light grey',width=2)

def changeCouleur(self) :
"Changer la couleur du fond du rectangle"
text_id = None
# Utilisation de la méthode get() pour reçevoir les données par l'utilisateur
self.ch = self.entree.get()
# Affichage facultatif
print("Vous avez saisie : ",self.ch)
# Appuyer sur 'R' ou 'r' renouvelle la fenêtre de la saisie
if self.ch.upper() =='R' :
self.videEntree()
if self.ch in self.cc :
#Création du rectangle aux positions : 65,30,185,70 de l'écran
self.can.itemconfigure(self.can.create_rectangle(65,30,185,70,fill=self.ch,width=2))
# Création du texte
text_id = self.can.create_text(130,50,anchor = "center")
# Configuration du contenu du texte
self.can.itemconfig(text_id,text=self.ch)
# Insertion du texte avec une police = 12
self.can.insert(text_id,12,"")
else :
# Création d'un Cavnas item, un text plus précisement pour l'erreur
# Recréation de du Vavnas en mettant la couleur par défaut = white

self.can.itemconfigure(self.can.create_rectangle(65,30,185,70,fill='white',width=2))
text_id = self.can.create_text(130,50,anchor = "center")
# Message d'erreur en cas de mauvaise saisie
self.can.itemconfig(text_id,text=" ERREUR\n(R)enouveller")
self.can.insert(text_id,12,"")
if self.ch.upper() =='R' :
# Message facultatif
print("Renouvellement de la fenêtre de la saisie")
else :
# Message facultatif
print('"{}" n\'est pas inclus dans la liste des couleurs'.format(self.ch))

def videEntree(self) :
"Rétablir le fond blanc et enlever les caractères saisies"
# Mettre le fond de la fenêtre de la saisie en blanc
self.entree.configure(bg='white')
# Vider le champs de la saisie
self.entree.delete(0,len(self.ch))

################# Programme principal #################

if __name__ == '__main__' :
from tkinter import *
f = Application()


Vous pouvez télécharger le code source directement via : Google Drive