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.

Découverte des Canvas

les Canvas sont des objets très utilisés sous TKinter puisque ce sont en fait des surfaces sur lesquelles on peut dessiner ou disposer des images.

Le programme suivant dessine, à chaque clic sur le bouton Go, un disque de rayon 20 pixels à une position aléatoire :

Regardons sans plus attendre ce programme. Nous nous attarderons sur les aspects liés au Canvas car le reste est archi classique pour vous à présent.

In [ ]:
from tkinter import *
import random

def Cercle():
    """ Dessine un cercle de centre (x,y) et de rayon r """
    x = random.randint(0,Largeur)
    y = random.randint(0,Hauteur)
    r = 20
    Canevas.create_oval(x-r, y-r, x+r, y+r, outline='blue', fill='blue')

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

# Création de la fenêtre principale (main window)
Mafenetre = Tk()
Mafenetre.title('Cercle')

# Création d'un widget Canvas (zone graphique)
Largeur = 480
Hauteur = 320
Canevas = Canvas(Mafenetre, width = Largeur, height =Hauteur, bg ='white')
Canevas.pack(padx =5, pady =5)

# Création d'un widget Button (bouton Go)
BoutonGo = Button(Mafenetre, text ='Go', command = Cercle)
BoutonGo.pack(side = LEFT, padx = 10, pady = 10)

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

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

Mafenetre.mainloop()

Explications sur le Canvas

La nouveauté réside ici dans l’utilisation du widget Canvas. Celui-ci permet de dessiner sur un espace défini de la fenêtre des formes géométriques (cercles, droites, polygones), des images (cartes à jouer, ...) ou du texte.

Les méthodes à remarquer ici sont

  • create_oval pour dessiner un cercle
    Canevas.create_oval(x-r, y-r, x+r, y+r, outline='blue', fill='blue')
  • delete(ALL) pour effacer le canvas.

Les propriétés remarquables du canvas sont ici width et height qui désignent respectivement la largeur et la hauteur en pixels. Du coup, la surface Canvas se crée de la manière suivante :

Canvas(Mafenetre, width = Largeur, height =Hauteur, bg ='white')

Les coordonnées sur le canvas s’expriment en pixels. Le (0,0) se trouve en haut à gauche. On remarquera que l’axe des ordonnées est donc tourné vers le bas.

A vous de jouer

Modifier l'exemple ci-dessus pour

  • faire une couleur de fond noire
  • afficher des rectangles verts de 20x10 pixels

On pourra utiliser la méthode create_rectangle dont l'utilisation est similaire à create_oval

Les canvas étant des objers très riches, il peut être utile de se référer à la doc officielle de TKinter pour tirer parti de cette richesse : Documentation officielle de TKinter / Canvas

In [ ]:
from tkinter import *
import random

#Ecrivez votre code ici