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.

Jeu de carte

In [ ]:
# On récupère les cartes du classeur pySide...
!cp ../pySide/carte*.gif .

Le programme suivant dessine une carte sur un canvas. Un clic gauche avec la souris sur la carte retourne celle-ci.

Voici le programme. Testez-le

In [ ]:
from tkinter import *

def changeCarte(event):
    """Changement de carte si clic sur la carte"""
    global noImage,imageGif
    # On verifie que le clic a eu lieu sur la carte
    if event.x>50 and event.x<195 and event.y>10 and event.y<210:
        noImage=noImage%2+1 # echange du no de carte
        imageGif=PhotoImage(file="carte"+str(noImage)+".gif")
        # On charge la nouvelle image
        can1.itemconfigure(maCarte,image=imageGif)

noImage=1 # Variable globale vonteant le No de carte
maFenetre=Tk()
maFenetre.title("Jeu de carte")

# Creation du canvas et liaison avec le clic de souris
can1 = Canvas(maFenetre, width =240, height =240, bg ='white')
can1.bind("<Button-1>",changeCarte)
can1.pack()

# Bouton quitter
btn=Button(maFenetre,text="Quitter",command=maFenetre.destroy)
btn.pack(side=BOTTOM,padx=5,pady=5)

# Placement de l'image initiale designee par "maCarte" sur le canvas
imageGif=PhotoImage(file="carte1.gif")
maCarte = can1.create_image((50, 10), image =imageGif, anchor="nw")

maFenetre.mainloop()

Affichage d'un fichier gif sur un Canvas

L'affichage d'un fichier .gif sur un Canvas se fait simplement à l'aide de ces deux lignes :

imageGif=PhotoImage(file="carte1.gif")
maCarte = can1.create_image((50, 10), image =imageGif, anchor="nw")

La première ligne charge l'image en mémoire dans l'objet imageGif, et la seconde se charge de l'affichage sur le Canvas aux coordonnées indiquées. Le anchor sert à indiquer que les coordonnées donées sont celles du coin supérieur gauche.

Dans le reste du programme, l'objet image sur le Canvas sera accessible via la variable maCarte.

Retournement de la carte

Pour retourner la carte, on doit reconfigurer l'objet maCarte du canvas afin de modifier son attribut image sur l'autre face de l'image. Cela se fait gràce à la méthode itemconfigure() du Canvas :

can1.itemconfigure(maCarte,image=imageGif)

Le reste de la fonction changeCarte est assez explicite : il s'agit de charger alternativement l'image carte1.gif ou carte2.gif. On utilise pour cela une petite astuce utilisant l'opération modulo :

noImage=noImage%2+1 # echange du no de carte
imageGif=PhotoImage(file="carte"+str(noImage)+".gif")

Pour finir, on s'assure de ne retourner la carte que si le clic a été fait dans la zone de la carte. Comme on conaît les coordonnées du clic, un bête test se charge de cette vérification.

In [ ]: