PYTHON : EXERCICES NIVEAU F

Les exercices proposés sur cette page combinent l'utilisation de la programmation par objets et la mise en oeuvre d'une interface graphique. L'objectif est d'utiliser le principe de dérivation afin de créer de nouveaux types de widgets, à partir des widgets existantes, afin d'enrichir les fonctionnalités de la bibliothèque ezTK.

Pour bien démarrer, il est fortement conseillé de s'inspirer des exemples de programmes utilisant le module Tkinter. Deux sources de documentation sont fournies :

Exercice F0

L'objectif de cet exercice d'introduction est de réaliser une série de modifications simples sur les codes sources fournis dans la rubrique "Exemples Niveau F" :

Exercice F1

Ecrire une classe LabelGrid qui permet de créer une grille regroupant M x N widgets de type Label. Après la création de l'objet, les paramètres de chaque cellule (contenu de type 'texte' ou de type 'image', couleur d'avant-plan, couleur d'arrière-plan, relief) doivent pouvoir être configurés indépendamment pour chaque cellule, en indexant l'objet par les indices de la cellule (cf. exemple d'utilisation). Pour que la widget garde une configuration de grille M x N, il est important que la taille (exprimée en nombre de caractères pour un contenu de type 'texte', ou en nombre de pixels pour un contenu de type 'image') soit identique pour toutes les cellules.

Exemple d'utilisation :
================================================================================
LabelGrid : a rectangular grid of 'Label' widgets
================================================================================
>>> colors = ('#F00','#0F0','#00F','#FF0','#F0F','#0FF')
>>> grid = LabelGrid(root[0], size=(9,5)) # 'root[0]' is the toplevel window
>>> for n in range(9*5):
      cell = divmod(n,5); grid[cell]['bg'] = colors[randrange(6)]
>>> grid.pack(side=LEFT, fill=BOTH, expand=YES, padx=5, pady=5)
Le résultat graphique obtenu avec cet exemple est représenté dans l'image ci-dessous

Interface du programme 'LabelGrid'

Exercice F2

En combinant les fonctionnalités de la classe LabelGrid (cf. exercice E1) et de la classe ImageButton (cf. exemple E3), écrire une classe ButtonGrid qui permet de créer une grille regroupant M x N widgets de type Button. Comme pour la classe ImageButton, le constructeur est appelé en passant en paramètre, une liste de noms de fichiers au format GIF qui seront utilisés pour l'affichage des boutons (sauf qu'ici, la liste d'images est commune à toutes les cellules de la grille). De même, le changement d'état de la cellule s'obtient en lui affectant une nouvelle valeur d'état (cf. exemple d'utilisation). Après la création de l'objet, comme pour la classe LabelGrid, les paramètres de chaque cellule doivent pouvoir être configurés indépendamment pour chaque cellule, en indexant l'objet par les indices de la cellule. Enfin, pour que la widget garde une configuration de grille M x N, la taille de toutes les cellules doit être identique et égale à la taille de la plus grande des images de la liste.

Exemple d'utilisation :
================================================================================
ButtonGrid : a rectangular grid of 'Button' widgets with GIF images
================================================================================
>>> names = ["Z%s.gif" % c for c in "RGBCMY"]
>>> grid = ButtonGrid(root, names, size=(12,6), bg='#000')
>>> for n in range(12*6):
      cell = divmod(n,6); grid(cell, randrange(6))
>>> grid.pack(side=LEFT, fill=BOTH, expand=YES, padx=5, pady=5)
Le résultat graphique obtenu avec cet exemple est représenté dans l'image ci-dessous

Interface du programme 'ButtonGrid'

Exercice F3

TODO...

Exercice F4

Ecrire une classe Slide qui réimplémente le programme slide (cf. exercice C6) en utilisant cette fois-ci, le paradigme de programmation par objets. On définira une classe SlideBoard pour implémenter l'ensemble des fonctionnalités nécessaires à la grille de jeu.

Exercice F5

Ecrire une classe Hunt qui réimplémente le programme hunt (cf. exercice C7) en utilisant cette fois-ci, le paradigme de programmation par objets. On utilisera une classe dérivée de la classe ButtonGrid (cf. exercice F2) pour implémenter la grille de jeu.

Exercice F6

Ecrire une classe Sequence qui réimplémente le programme sequence (cf. exercice C8) en utilisant cette fois-ci, le paradigme de programmation par objets. On utilisera une classe dérivée de la classe ButtonGrid (cf. exercice F2) pour implémenter la grille de jeu.
...
Christophe Schlick