Dessiner avec le module Turtle et ses méthodes

Le module Turtle

Première fenêtre

# importation du module Turtle
import turtle

# première fenêtre
turtle.setup(600, 400, 100, 100)

# titre de la fenêtre
turtle.title("Ma première fenêtre")

# modification de la couleur de fond
turtle.bgcolor("yellow")

Comprendre le programme :

  • turtle.setup(600, 400, 100, 10) : crée une fenêtre de largeur 600 pixels et de hauteur 400 pixels. Et place la fenêtre sur l'écran en x = 100 et y = 100

Problème : la fenêtre se referme immédiatement après que le dessin soit terminé.

Pour maintenir la fenêtre visible quelques secondes nous allons utiliser le module time de Python et arrêter le programme pendant 3 secondes avec la méthode sleep du module time : time.sleep(3).

Cela donne :

# importation du module Turtle
import turtle
# importation du module time
import time

# première fenêtre
turtle.setup(600, 400, 100, 100)

# titre de la fenêtre
turtle.title("Ma première fenêtre")

# modification de la couleur de fond
turtle.bgcolor("yellow")

# on arrête le programme pendant 3 secondes
time.sleep(3)

Dessiner des lignes

Pour dessiner des lignes, on ajoute ce qui suit à notre précédent programme.

# dessiner un trait
turtle.forward(100) # on avance de 100 pixels en traçant un trait

# tourner vers la droite et dessiner un trait
turtle.right(90)    on tourne vers la droite de 90 degrés
turtle.forward(100)

time.sleep(3)       # on fait une pause de 3 secondes

Comprendre le programme :

  • voir les commentaires du programme
  • turtle.forward(distance) fait avancer le stylo de la longueur distance en pixel.
  • on peut également utliser turtle.backward(distance) qui fait l'inverse : le stylo recule de la longueur distance

Effacer l'écran et redémarrer de zéro

Pour dessiner plusieurs choses à la suite, nous allons avoir besoin d'effacer notre fenêtre. Pour cela :

turtle.reset()

Dessiner des cercles

# dessiner un cercle de rayon 100
turtle.circle(100)

# pause de 2 secondes
time.sleep(2)
# effacer la fenêtre
turtle.reset()

# dessiner un quart de cercle de rayon 100  
turtle.circle(100,90) # circle(r,a) où r est le rayon et a l'angle, ici 90°
time.sleep(2)

Modifier la taille su stylo

On peut changer l'épaisseur du trait utilisé pour effectuer les tracés.


## Exemple de tracé d'un triangle équilatéral avec une base au trait plus épais

# changement de l'épaisseur du trait
turtle.width(3)

# tracé de la base du triangle  
turtle.forward(100)

# changement épaisseur du trait et tracé du côté droit
turtle.width(1)
turtle.left(120)
turtle.forward(100)

# tracé du côté gauche
turtle.left(120)
turtle.forward(100)

time.sleep(3)

Déplacer le stylo

On déplace le stylo avec l'instruction turtle.goto(x,y) où x et y sont les coordonnées du point de destination.

En se déplaçant, le stylo va tracer un trait. Cela ne représente donc pas un grand intérêt par rapport à forward que nous avons vu précédemment.

Mis à part que Turtle offre la possibilité de :

  • lever le crayon avec turtle.up()
  • baisser le crayon avec turtle.down()

Combiné avec goto(), cela nous permet de faire plusieurs dessins côte à côte.

## dessiner trois cercles dans la même fenêtre

# épaisseur du trait
turtle.width(2)

# on lève le crayon
turtle.up()
# on déplace le crayon en (-150,0)
turtle.goto(-150,0)
# on baisse le crayon
turtle.down()

# on trace un cercle
turtle.circle(50)

turtle.up()
turtle.goto(0,0)
turtle.down()

turtle.circle(50)

turtle.up()
turtle.goto(150,0)
turtle.down()

turtle.circle(50)

time.sleep(3)

Petite optimisation de notre code : on remarque que le programme précédent refait 3 fois la même chose, seule la position du départ du cercle change.

On peut donc optimiser notre code avec une boucle for :

## dessiner trois cercles dans la même fenêtre

# épaisseur du trait
turtle.width(2)

for x in range(-150,151,150):
    print(x)
    # on lève le crayon
    turtle.up()
    # on déplace le crayon
    turtle.goto(x,0)
    # on baisse le crayon
    turtle.down()

    # on trace un cercle
    turtle.circle(50)

time.sleep(3)

Comprendre le programme : d'accord pour les mouvements du crayon et le tracé... Mais c'est quoi cette boucle for ??? On connaît pas, nous !

  • for x in range(-150,151,150) se comprend de la façon suivante : pour x compris entre -150 et 151 tous les 150 (on dit avec un pas (ou step) de 150). Si je compte entre -150 et 151 tous les 150, ça donnera -150, 0 et 150.

Pourquoi 151 et pas 150 : si 150 est la borne supérieure de mon range, 150 ne sera pas pris en compte. Revoir si nécessaire la partie du cours sur la boucle for.

Dessiner un point

turtle.dot(15) # où 15 est l'épaisseur du trait

Définir la couleur du trait ou des points

Pour définir la couleur du crayon, on utise la méthode color() et on précise en paramètre la couleur qui est le nom de la couleur en anglais entre guillemets.

Exemple :

turtle.color("white")

Un exemple plus complet :

## dessiner un rectangle avec des lignes colorées
turtle.begin_fill()

turtle.ht()            # on cache le curseur
turtle.pensize(3)      # équivalent de width - pour définir la taille du trait

turtle.color("blue")
turtle.forward(100)

turtle.right(90)
turtle.color("red")
turtle.forward(50)

turtle.right(90)
turtle.color("green")
turtle.forward(100)

turtle.right(90)
turtle.color("purple")
turtle.forward(50)

turtle.fillcolor("white")

time.sleep(3)

Connaître la position de la tortue

print(turtle.pos())

Ne pas afficher le curseur

turtle.ht() # ht pour hide turtle

Pour aller plus loin

Cliquer ici pour consulter la documentation complète du module Turtle