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.

Capture d'un événement souris sur un Canvas

Dans cet exemple, on dessine un carré sur un Canvas à l’endroit du clic de la souris. Pour cela, on utilise l’événement associé au clic gauche de la souris :

In [ ]:
from tkinter import *

def Clic(event):
    """ Gestion de l'événement Clic gauche sur la zone graphique """
    # position du pointeur de la souris
    X = event.x
    Y = event.y
    # on dessine un carré
    r = 20
    Canevas.create_rectangle(X-r, Y-r, X+r, Y+r, outline='black',fill='green')

def Effacer():
    """ Efface la zone graphique """
    Canevas.delete(ALL)

# Création de la fenêtre principale
Mafenetre = Tk()
Mafenetre.title('Carrés')

# Création d'un widget Canvas
Largeur = 480
Hauteur = 320
Canevas = Canvas(Mafenetre, width = Largeur, height =Hauteur, bg ='white')

# La méthode bind() permet de lier un événement avec une fonction :
# un clic gauche sur le canvas provoquera l'appel de la fonction Clic()
Canevas.bind('<Button-1>', Clic)
Canevas.pack(padx =5, pady =5)

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

Mafenetre.mainloop()

Capture du clic de souris

Pour réaliser cet exemple, nous devons

  • appeler une fonction de notre choix lorsqu'un clic de souris est effectué
  • récupérer les coordonnées sur le Canvas du clic de souris

La première action est réalisée par la ligne :

Canevas.bind('<Button-1>', Clic)

Cette nouvelle méthode bind() permet d'associer un événement à une fonction, ici la fonction Clic().

L'événement que nous souhaitons capturer est < Button-1 >. Cet événement est prédéfini dans TKinter et correspond à un clic gauche de souris.

La fonction clic() qui récupère le clic de souris accepte un argument event qui est passé autoimatiquement par tkinter. event est un objet qui possède deux attributs intéressants pour notre problème : event.x et event.y qui sont les coordonnées de la souris sur le Canvas.

A vous de jouer

Vous allez réaliser votre premier logiciel de dessin ! L'idée est de dessiner une ligne lorsque le bouton de la souris reste enfoncé. Voici ce que vous devrez obtenir :

Quelques indications

Pour réaliser cet exercice, vous aurez besoin de détecter un nouvel événement sur le Canvas : le déplacement de la souris avec le bouton enfoncé. Le nom TKinter pour cet événement est < B1-Motion >. Son utilisation est identique à celui de l'exemple.

Pour dessiner, vous utiliserez la méthode create_line(X1,Y1,X2,Y2) de Canvas où $M1(X1,Y1)$ est l'origine du segment et $M2(X2,Y2)$ est l'extrémité du segment.

Du coup, vous aurez probablement besoin de mémoriser en plus de la position actuelle de la souris, sa position antérieure afin de tracer le segment entre les deux positions. Peut-être aurez-vous besoin de recourir à des variables globales.

In [ ]:
from tkinter import *

# Ecrivez votre code ici
In [ ]: