Académique Documents
Professionnel Documents
Culture Documents
Fenetre.mainloop()
Travail à faire 1
Commencer à écrire le script précédent pour vous familiariser avec ces notions de base.
Les widgets situés à l'intérieur d'une fenêtre sont les enfants de celle-ci; inversement, la fenêtre
est la parente des widgets.
Le widget Button
Syntaxe :
nom du widget = Button(nom de la fenêtre parente, text = "texte à afficher dans
le bouton", command = nom de la fonction à appeler lors d'un clic sur le bouton )
Exemple :
bouton = Button( Fenetre , text = "quitter", command = Fenetre.destroy) #
Création du bouton
bouton.pack() # Affichage du bouton dans la fenêtre
Ce qui sera affiché sur le bouton est contenu dans la propriété text.
La fonction appelée par command permet une action lorsqu'on clique sur le bouton.
Cette fonction peut être choisie parmi les fonctions intégrées au système, ou celles définies
dans le programme ( lancer d'un calcul, affichage d'une image,...)
Ici, la commande système Fenetre.destroy() est une fonction qui "détruit" l'objet nommé
" Fenetre " en mémoire. La pression du bouton a donc ici pour conséquence la fermeture de
la fenêtre nommée "Fenetre".
On remarque donc que la création d'un widget se fait en deux temps : création en mémoire
( première instruction ), puis affichage ( instruction .pack() ).
Le widget Label
Syntaxe :
nom du widget = Label(nom de la fenêtre parente, text = 'texte à afficher' , fg
= 'couleur du texte', bg = 'couleur du fond' )
Exemple :
texte = Label( Fenetre, text = "Hello World",fg = 'black', bg = 'white') #
Création d'un label avec un texte noir sur fond blanc
texte.pack() # Insertion du label dans la fenêtre
Le widget Entry
Syntaxe :
nom du widget = Entry( nom de la fenêtre parente )
Exemple :
Entree = Entry( Fenetre ) # Création d'un champ de saisie nommé "Entree"
Entree.pack()# insertion du champ dans la fenêtre "Fenetre"
Positionnement des widgets dans la fenêtre
L'instruction pack() utilisée précédemment sans précision place par défaut les widgets les uns en
dessous des autres dans la fenêtre; il existe bien entendu une manière plus "fine" de gérer ce
positionnement.
le gestionnaire pack() déjà vu précédemment : souvent difficile à maîtriser car pas très
intuitif...
le gestionnaire grid() : beaucoup plus simple à manipuler, puisqu'il suffit de voir la fenêtre
comme une grille, dans laquelle on positionne les widgets en indiquant à quelle ligne
( row ) et à quelle colonne ( column ) il doit se positionner.
Exemple :
# création des widgets
bouton1 = Button(ma_fenetre, text = "Bouton 1")
bouton2 = Button(ma_fenetre, text = "Bouton 2")
etiq = Label(ma_fenetre, text = "Etiquette")
Travail à faire 2
Vous allez réaliser une interface graphique assez simple ayant l'aspect ci-dessous :
Quelques indications :
Pour changer le texte d'une étiquette, il faut utiliser avec Tkinter une variable de contrôle; il s'agit
d'une variable qui sera liée à un ou plusieurs widgets, et qui pourra être lue ou modifiée; la
modification se "propagera" alors dans tous les widgets auxquels elle est liée...
Il existe de très nombreux widgets, chacun ayant un certain nombre d'options; impossible de tous
les documenter ici. Il faudra donc souvent que vous fassiez vos propres recherches
d'informations pour utiliser telle ou telle notion liée à Tkinter...
création d'un widget ( canevas, étiquette ) dans lequel l'image sera affichée :
zone_image = Canvas(Fenetre, width = largeur, height = hauteur) # crée un
canevas de dimensions ajustées à celles de l'image
zone_image.create_image(0,0, anchor = NW, image = mon_image) # association
image/widget
zone_image.pack() # placement du widget
'0,0' indique les coordonnées du point de la fenêtre où sera affichée l'image ( ici, en haut à
gauche ).
La propriété anchor permet d'indiquer quel coin de l'image sera ancrée en ce point ( ici :
North-West = haut-gauche )
Travail à faire 3
Écrire un script qui affiche une image GIF ou PGM/PPM dans une fenêtre
Tkinter.
print(pixel[1])
>>> 235
Les informations devant être formatées d'une manière particulière, on utilisera la syntaxe suivante
sans se poser trop de questions :
photo.put("#%02x%02x%02x" % pixel, (x,y))
pixel doit être un tuple de 3 valeurs cohérentes avec le codage des couleurs de l'image ( pour une
image en niveaux de gris, ces 3 valeurs doivent donc être identiques...)
Même remarque que ci-dessus pour le système de coordonnées (x,y) utilisé.
Les boutons appelleront les différentes fonctions de traitement de l'image; vous pourrez en
rajouter bien entendu, mais commencez d'abord à en faire fonctionner un !!
Pour définir la valeur du seuil, on utilise ici une échelle de valeurs, correspondant au
widget Scale. Vous pouvez expérimenter d'autres possibilités, le widget SpinBox pourrait aussi
convenir...
L'objectif est donc de créer en Python et à l'aide de Tkinter, un jeu de morpion, jouable à deux
joueurs ou contre l'ordinateur; une ébauche "d'intelligence artificielle" devra donc être développée
pour ça !
dans un premier temps, vous créerez l'interface graphique de votre jeu, à savoir une simple
grille de 3 cases x 3 cases dessinée sur un canevas Tinter ( Rappel : il s'agit d'un widget
correspondant à une "zone de dessin").
une fois le "plateau de jeu" créé, vous coderez le jeu en lui-même, en vous restreignant à un
jeu joueur contre joueur; votre script devra donc gérer l'affichage d'un rond ou d'une croix
selon le joueur et l'endroit où il aura cliqué dans le jeu.
ensuite, vous coderez les instructions qui permettent au script de
déterminer à chaque tour de jeu si un des joueurs est gagnant, c'est à
dire a aligné 3 symboles identiques.
une fois que tout ceci fonctionnera, vous pourrez alors réfléchir à un
jeu « joueur contre PC »...
Votre script doit donc "intercepter" les clics souris et pouvoir déterminer la
position du curseur de la souris au moment du clic : on parle pour cela
d'évènements souris. Il existe de même des évènements clavier ( non abordés
ici ).
Deux choses sont nécessaires :
Les évènements utilisables avec la souris sont par exemple : '<Button-1>' pour la détection du
clic gauche, '<Button-2>' pour le clic droit, etc...
Le gestionnaire en lui-même est une fonction qui sera automatiquement appelée lorsque
l'évènement se produit; cette fonction ne peut recevoir qu'un seul argument, l'évènement en lui-
même stockée dans une "variable" nommée evt.
...où les coordonnées x,y correspondent ici à celles des coins du carré dans lequel le cercle est
inscrit.