La classe Canvas, qui fait partie de tkinter, permet de définir un espace rectangulaire dans lequel on placera différents autres éléments tels que du texte, des images ou des formes géométriques.
Sans aller plus loin dans les explications, voici un petit programme qui utilise le canevas pour dessiner en utilisant les flèches.
#!/usr/bin/env python
from tkinter import *
def fleche_gauche(event):
"""Dessine une ligne de 10 unités vers la gauche."""
x1 = position['x']
y1 = position['y']
position['x'] -= 10
if position['x'] < 2:
position['x'] = 2 # en bas de 2, on était passé la bordure
x2 = position['x']
y2 = position['y']
canevas.create_line(x1, y1, x2, y2, fill=couleur)
def fleche_droite(event):
"""Dessine une ligne de 10 unités vers la droite."""
x1 = position['x']
y1 = position['y']
position['x'] += 10
if position['x'] > dimension:
position['x'] = dimension
x2 = position['x']
y2 = position['y']
canevas.create_line(x1, y1, x2, y2, fill=couleur)
def fleche_haut(event):
"""Dessine une ligne de 10 unités vers le haut."""
x1 = position['x']
y1 = position['y']
position['y'] -= 10
if position['y'] < 2:
position['y'] = 2
x2 = position['x']
y2 = position['y']
canevas.create_line(x1, y1, x2, y2, fill=couleur)
def fleche_bas(event):
"""Dessine une ligne de 10 unités vers le bas."""
x1 = position['x']
y1 = position['y']
position['y'] += 10
if position['y'] > dimension:
position['y'] = dimension
x2 = position['x']
y2 = position['y']
canevas.create_line(x1, y1, x2, y2, fill=couleur)
def bouton_noir():
"""Initialise la couleur à noir."""
global couleur # sans l'instruction global, la variable était visible mais non modifiable
couleur = 'black'
def bouton_rouge():
"""Initialise la couleur à rouge."""
global couleur
couleur = 'red'
def bouton_bleu():
"""Initialise la couleur à bleu."""
global couleur
couleur = 'blue'
def bouton_jaune():
"""Initialise la couleur à jaune."""
global couleur
couleur = 'yellow'
def bouton_vert():
"""Initialise la couleur à vert."""
global couleur
couleur = 'green'
def bouton_blanc():
"""Initialise la couleur à blanc."""
global couleur
couleur = 'white'
########## programme principal ##########
# largeur et hauteur du canevas
dimension = 350
# couleur de la prochaine ligne
couleur = 'black'
# pour retenir la position actuelle (on part du centre du canevas)
position = {
'x': dimension / 2,
'y': dimension / 2
}
# fenêtre principale
fenetre = Tk()
fenetre.title("Dessiner sur le canevas")
fenetre.bind('<Left>', fleche_gauche)
fenetre.bind('<Right>', fleche_droite)
fenetre.bind('<Up>', fleche_haut)
fenetre.bind('<Down>', fleche_bas)
# libellé
libelle = Label(fenetre, text='Choisissez votre couleur puis appuyez sur les flèches pour dessiner.')
libelle.grid(row=0, columnspan=2, padx=10, pady=(20, 10))
# boutons pour les couleurs
bouton_noir = Button(fenetre, command=bouton_noir, bg='black', padx=20, pady=8)
bouton_noir.grid(row=1, column=0)
bouton_rouge = Button(fenetre, command=bouton_rouge, bg='red', padx=20, pady=8)
bouton_rouge.grid(row=2, column=0)
bouton_bleu = Button(fenetre, command=bouton_bleu, bg='blue', padx=20, pady=8)
bouton_bleu.grid(row=3, column=0)
bouton_jaune = Button(fenetre, command=bouton_jaune, bg='yellow', padx=20, pady=8)
bouton_jaune.grid(row=4, column=0)
bouton_vert = Button(fenetre, command=bouton_vert, bg='green', padx=20, pady=8)
bouton_vert.grid(row=5, column=0)
bouton_blanc = Button(fenetre, command=bouton_blanc, bg='white', padx=20, pady=8)
bouton_blanc.grid(row=6, column=0)
# bouton pour terminer
bouton_terminer = Button(fenetre, text='Terminer', command=fenetre.destroy, padx=15)
bouton_terminer.grid(row=7, column=0, padx=10, pady=(5, 10))
# canevas
canevas = Canvas(fenetre, width=dimension, height=dimension, bg='white')
canevas.grid(row=1, rowspan=7, column=1, padx=15, pady=(8, 15))
# la fenêtre s'affiche puis attend les interactions de l'usager
fenetre.mainloop()
Plusieurs langages de programmations ont une classe Turtle qui permet de reproduire sur écran la fameuse tortue graphique inventée dans les années 70 par le laboratoire d’intelligence artificielle du MIT.
Bien que la tortue ne soit pas nécessaire pour dessiner sur un canevas, son utilisation dans les cours d'initiation à la programmation est intéressante et grandement répandue.
Si vous êtes intéressé à connaître les origines de la tortue graphique, consultez le site suivant :
« BFOIT Introduction to computer programming – Commanding a Turtle ». Berkeley Foundation for Opportunities in Information Technology. http://www.bfoit.org/itp/IntroCmds.html
« Canvas Widgets ». Python Course. https://www.python-course.eu/tkinter_canvas.php
« A Simple Tutorial for Python's turtle.py Module ». GigtHub. https://github.com/asweigart/simple-turtle-tutorial-for-python/blob/master/simple_turtle_tutorial.md
« Hello, little turtles! ». Learn with Python 3. http://openbookproject.net/thinkcs/python/english3e/hello_little_turtles.html
▼Publicité