Afin de pouvoir personnaliser votre classeur sans détruire le classeur sur lequel travaille votre voisin, vous allez tout d'abord aller dans le menu File puis Make a copy.... Renommez le classeur en ajoutant votre nom à la fin du nom de fichier par exemple.

Gestion des événements clavier

Dans cette activité, nous allons déplacer un pion sur une surface Canvas en utilisant les touches du clavier pour le diriger.

Mais tout de suite, regardons le programme :

In [ ]:
from tkinter import *

def Clavier(event):
    """ Gestion de l'événement Appui sur une touche du clavier """
    global PosX,PosY
    touche = event.char
    # déplacement vers le haut
    if touche == 'a':
        PosY -= 20
    # déplacement vers le bas
    if touche == 'q':
        PosY += 20
    # déplacement vers la droite
    if touche == 'm':
        PosX += 20
    # déplacement vers le haut
    if touche == 'l':
        PosX -= 20
    # on dessine le pion à sa nouvelle position
    Canevas.coords(Pion,PosX -10, PosY -10, PosX +10, PosY +10)
    # Création de la fenêtre principale

Mafenetre = Tk()
Mafenetre.title('Pion')

# position initiale du pion
PosX = 230
PosY = 150

# Création d'un widget Canvas (zone graphique)
Largeur = 480
Hauteur = 320
Canevas = Canvas(Mafenetre, width = Largeur, height =Hauteur, bg ='white')
Pion = Canevas.create_oval(PosX-10,PosY-10,PosX+10,PosY+10,width=2,fill='red')
Canevas.focus_set()
Canevas.bind('<Key>',Clavier)
Canevas.pack(padx =5, pady =5)

# Création d'un widget Button (bouton Quitter)
Button(Mafenetre, text ='Quitter', command = Mafenetre.destroy).pack(side=LEFT)

Mafenetre.mainloop()

Explications

Tout d'abord, les coordonnées du pion sont stockées dans les variables globales PosX et PosY. La fonction Clavier() a pour but de les actualiser en fonction de la touche qui a été pressée.

Pour associer l'appel de la fonction Clavier() lorsqu'une touche est pressée, le rpincipe est le même que puor le clic de souris : on appelle la méthode bind() du Canvas. L'événement qui nous intéresse ici est désigné par < Key >

Une petite subtilité ici cependant : pour que le canvas capture les événement clavier, il faut qu'il soit sélectionné (qu'il ait le focus comme on dit). On lui donne le focus grâce à la commande

Canevas.focus_set()

Nous avons déjà rencontré cette méthode lorsque l'on voulait passer le contrôle à un champ de saisie, le principe est ici le même.

La dernière chose qu'il reste à voir, c'est comment modifier les coordonnées de notre pion lorsque les variables PosX et PosY ont été ajustées. Cela se fait par l'appel :

Canevas.coords(Pion,PosX -10, PosY -10, PosX +10, PosY +10)

Pion désigne ici l'objet retourné par la commande create_oval(). Cc'est l'objet Canvas qui actualise les coordonnées du pion grâce à la méthode coords().

A vous de jouer

Dans l'exemple ci-dessus, il n'y a pas de limite au déplacement du pion, même lorsque ce dernier sort du Canvas. Modifier le programme afin que s'il sort d'un coté de la fenêtre, il réapparaisse de l'autre, un peu comme dans le jeu du PacMan.

In [ ]:
from tkinter import *

#Votre programme ici