Tkinter - TP 1

Le but de ce premier TP est d'utiliser le fichier système rgb.txt, qui définit les couleurs connues du serveur graphique X11, pour afficher une fenêtre de sélection d'une couleur. Cette fenêtre présente les couleurs sous la forme d'une matrice de carrés de couleur. Un clic du bouton gauche de la souris affiche le nom de la couleur dans une zone d'affichage prévue à cet effet. La fenêtre comporte également une barre de défilement vertical et deux boutons Ok et Annuler.

image1

Python

Objectif : révisions avec le langage python.

  • gestion de fichier : affichez sur le fichier standard de sortie le contenu du fichier rgb.txt présent dans le répertoire /etc/X11/ en traitant explicitement les éventuels problèmes d'existence ou de protection en lecture à l'aide d'un code retour ou d'un traitement d'exception (cf. File Objects).

  • parser : créez une fonction qui charge ce fichier contenant la liste des couleurs et renvoit un dictionnaire (ou tableau associatif) à partir de celle-ci en associant à chaque nom de couleur (la clé du dictionnaire) son code RVB sous la forme d'un tuple ; utilisez cette fonction pour afficher le résultat sur la sortie standard.

    Attention : prenez soin de normaliser les identifiants du tableau car il existe de nombreux doublons dans le fichier rgb.txt, vous pouvez par exemple supprimer tous les espaces et les tabulations quand ils existent et mettre en majuscule la première lettre de chaque mot ce qui vous permettra de déceler ces doublons (cf. String Services, More on Lists, Dictionaries) ; le traitement du triplet RVB nécessite aussi de prendre en compte espaces et tabulations.

  • conversion : implantez une fonction qui prend le dictionnaire des couleurs en paramètre et qui produit une liste des noms de couleurs triés par ordre alphabétique suivant un format d'affichage normalisé (par exemple : chaque mot est separé par un espace et commence par une majuscule, les indices sont séparés par un espace).

Tkinter

Objectif : utilisation des premiers widgets.

  • créez une fenetre indépendante (Toplevel, à ne pas confondre avec la root window créée à l'initialisation) contenant un label associé à une variable (StringVar), une zone graphique (Canvas) ainsi qu'un cadre (Frame) contenant deux boutons : Ok et Annuler,

  • affichez une matrice de carrés à l'écran de la couleur de chaque entrée du fichier rgb.txt, en utilisant ce que vous avez fait précédemment ; afin de préparer la suite du TP chaque carré doit comporter deux "tags" : l'un (commun à tous les carrés) permettant de l'associer à une action de l'utilisateur, l'autre correspondant au nom de la couleur.

    Remarque : effectuez un travail préparatoire pour rendre l'affichage de la matrice de carrés paramétrable, en calculant notamment le nombre de colonnes et de lignes que comportera la matrice en fonction du nombre de couleurs, du côté de chaque carré et de l'espacement qui le sépare de ses voisins.

  • associez à cette zone graphique une barre de défilement (Scrollbar) et réciproquement (voir pour cela les options scrollregion et yscrollcommand du Canvas),

  • associez, au clic du bouton de gauche (tag_bind) sur un carré, l'affichage de la couleur dans le label dans un format lisible par l'utilisateur,

  • la fenêtre doit devenir modale (grab_set) et le bouton Ok doit mettre à jour la dernière valeur sélectionnée et fermer la fenêtre, le bouton Annuler fermant simplement la fenêtre.