TD d'Informatique

 TD 6 - Python

Tkinter

EXO 1

On veut créer une interface qui affiche un ovale.
4 boutons permettent de déplacer cet ovale
1 bouton pour sortir du programme.





- Il faut d'abord créer un canvas (fond gris) dans lequel on créera un ovale.
On doit pour cet ovale spécifier la couleur, l'épaisseur de bordure, et les 4 coordonnées (coin supérieur gauche et coin inférieur droit, comme pour les rectangles)
exemple: oval1 = canvas.create_oval(x1,y1,x2,y2,width=1,fill='green')

- Les 4 coordonnées sont 4 variables que l'on pourra (exceptionnellement) utiliser en globales lors de l'utilisation des fonctions

- Les 4 boutons doivent faire appel à 4 fonctions (sans argument)

- Ces fonctions doivent modifier les valeurs des coordonnées, puis réafficher l'ovale.

- Pour réafficher l'ovale à une autre position, il faut suffit de lui réaffecter de nouvelles coordonnées:
  canvas.coords(monovale, x1, y1, x2, y2)

- Ensuite (et seulement si le programme fonctionne déjà...) ajouter la possibilité de déplacer l'ovale avec les flèches du clavier (en plus des boutons)
Il faut utiliser la méthode "bind" sur un objet comme dans  cet exemple:
    fenetre.bind("<Down>", deplacement_bas)
. Le premier argument est la touche du clavier (<Left>, <Right>, <Up>, <Down>)
. Le deuxième est l'action à exécuter, soit une des 4 fonctions de déplacement, sauf que...bind n'accepte que des méthodes et pas des fonctions.
Solution: soit tout mettre en objet, soit ajouter un argument factice au moment de déclarer la fonction (remplace le "self")
L'appel de la fonction, lui, doit se faire sans argument.