Formation PUB400 : Python, 2018 Environnement graphique tkinter

9.16 Travailler sur un canevas Python


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.

Hello World écrit sur un canevas Python

Python

#!/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()

La classe Turtle

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

Pour plus d'information

« 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é

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre