Configurer la fenêtre

Nous commençons en douceur notre découverte de turtle avec la configuration basique d’une fenêtre. Cette étape est souvent primordiale dans l’utilisation des interfaces graphiques, ne serait-ce que pour choisir les dimensions de la fenêtre.

Les réglages

Avant d’utiliser le module, nous devons l’importer comme il est coutume de faire avec Python :

import turtle
Dimensions et positionnement

Après cela, nous pouvons ouvrir et positionner notre première fenêtre turtle. Pour ce faire, il suffit de faire appel à la fonction setup qui peut prendre quatre nombres en paramètre : la largeur (width) de notre fenêtre, sa hauteur (height), la position en largeur (startx) puis en hauteur (starty) du coin en haut à gauche de notre fenêtre par rapport au coin en haut à gauche de l’écran. Par défaut, la largeur vaut 50% de l’écran, la hauteur vaut 75% de l’écran et la fenêtre est centrée à l’écran. Voici quelques exemples pour mieux comprendre :

turtle.setup(640, 480, 100, 100)  #Largeur : 640px, Hauteur : 480px, pos x : 100px, pos y : 100px
turtle.setup(200, 200)  #Largeur : 200px, Hauteur : 200px, position centrée
turtle.setup(startx = 0, starty = 0)  #Largeur : 50%, Hauteur : 75%, position : coin haut gauche écran
turtle.setup()  #Largeur : 50%, Hauteur : 75%, position centrée

Si nous omettions de faire appel à cette fonction et que nous commencions par autre chose comme changer le titre par exemple, turtle se chargerait de l’ouvrir.

Titre

Pour changer le titre justement, il suffit de faire appel à title qui prend en paramètre le titre sous forme de chaîne de caractères. Rien de bien sorcier, cela donne :

turtle.title("Ma super fenêtre")  #Change le titre
Couleur de fond

La fonction bgcolor permet de modifier la couleur de fond. Elle prend en paramètre la couleur à appliquer soit sous la forme d’une chaîne de caractères (le nom ou le code hexadecimal), soit sous la forme d’un tuple (code RGB : (Red, Green, Blue) avec des valeurs entre 0 et 1 ici). Il existe de nombreux sites sur internet pour vous renseigner sur le code hexadecimal ou le code RGB d’une couleur, en voici un (pour passer des valeurs d’une échelle de 255 à 1, nous pouvons procéder ainsi : 127 => 127/255 = 0.50 en arrondissant; dans le sens inverse, cela donne 0.50 => 0.50*255 = 127 en tronquant). Si on ne lui passe aucun argument, elle nous retourne la couleur courante. Comme à l’accoutumée, voici quelques exemples :

turtle.bgcolor("black")  #Met fond en noir
print(turtle.bgcolor())  #Affiche 'black'
turtle.bgcolor("#00FF00")  #Met fond en vert
turtle.bgcolor((0.5, 0, 1))  #Met fond en violet

Au passage, voici un tableau récapitulatif de valeurs de couleur que nous pouvons utiliser. En plus, nous pouvons faire précéder une partie de ces valeurs des termes "light" pour clair ou "dark" pour foncé. Par exemple, "lightgrey" pour gris clair et "darkgrey" pour gris foncé. Une exception est retournée avec un message d’erreur lorsque la combinaison n’est pas possible.

Valeur Couleur
"white" Blanc
"black" Noir
"grey" Gris
"brown" Marron
"orange" Orange
"pink" Rose
"purple" Violet
"red" Rouge
"blue" Bleu
"yellow" Jaune
"green" Vert
Image de fond

Ensuite, nous pouvons aussi personnaliser le fond de notre fenêtre avec une image, qui est alors automatiquement centrée et ne prend que la place dont elle a besoin. La fonction bgpic permet de faire cela. Elle prend en paramètre une chaîne de caractères représentant le chemin vers l’image. Si nous ne lui fournissons aucune valeur, elle retourne le nom de l’image de fond s’il y a une ou "nopic" s’il n’y en a pas. Vous pouvez aussi lui passer "nopic" pour enlever l’image de fond. Les formats bmp et jpg ne sont pas reconnus contrairement aux formats png et gif. Un exemple :

turtle.bgpic("image.png")  #Ajoute l'image en fond
print(turtle.bgpic())  #Affiche 'image.png'
turtle.bgpic("nopic")  #Supprime l'image de fond s'il y en a une
print(turtle.bgpic())  #Affiche 'nopic'
Fermeture

Si vous avez testé les fonctions présentées ci-dessus avec la ligne de commande Python ou avec idle, vous vous êtes rendu compte que la fenêtre reste ouverte jusqu’à ce qu’on la ferme. Mais si vous exécutez le code autrement, la fenêtre se fermera automatiquement une fois les traitements terminés. Pour le premier cas, nous pouvons remédier à cela avec la fonction bye. Placée à la fin de notre code, l’exécution de celle-ci fermera la fenêtre et marquera la fin de l’exécution du programme. Pour le second cas, vous pouvez utiliser exitonclick qui permet d’associer le clique gauche à la fermeture de la fenêtre. Ces deux fonctions ne prennent aucun paramètre.

#Traitement
#...
turtle.bye()
#ou bien
turtle.exitonclick()
Afficher ou cacher le curseur

Enfin, de façon plus anecdotique, mentionnons la possibilité de cacher ou d’afficher le curseur (ou le crayon) avec les fonctions respectives hideturtle et showturtle. De plus, vous pouvez savoir si le crayon est actuellement affiché avec la fonction isvisible.

turtle.hideturtle()  #Cache le crayon
turtle.showturtle()  #Affiche le crayon
print(turtle.isvisible())  #Affiche 'True' : le crayon est visible

Il est temps de mettre en œuvre ce que l’on vient de voir !

TP : Une fenêtre personnalisée

Voilà, nous y sommes. Comme vous allez le voir, ce premier exercice est assez simple. Encore une fois, si vous êtes bloqué au cours de ces travaux pratiques, vous pouvez parcourir ce tutoriel ou demander de l’aide sur les forums pour vous aider.

Le but de l’exercice est de réaliser un programme ouvrant une fenêtre ayant ces caractéristiques :

  • Largeur = 1024px ; Hauteur = 768px ;
  • Position en largeur = Position en hauteur = 50px ;
  • Couleur de fond = jaune ;
  • Image de fond présente (je vous laisse choisir votre image, faites en sorte qu’elle ne remplisse pas toute la fenêtre) ;
  • Fermeture au clique possible une fois fini.

De plus, je vous demande aussi de programmer une fonction récapitulant toutes ces informations (hormis celles relatives à la position de la fenêtre et au clique). Pour connaître la largeur et la hauteur de la fenêtre, il faut respectivement utiliser les fonctions windows_width et windows_height qui ne prennent aucun paramètre.

Voici le résultat obtenu de mon côté :

Le résultat.
Le résultat.
largeur : 1024 px
hauteur : 768 px
couleur : yellow
image : TP_fenetre_personnalisee.png

Nous terminons sur la correction :

import turtle

#Constantes
LARGEUR, HAUTEUR = 1024, 768
POS_X = POS_Y = 50
NOM_IMAGE = "TP_fenetre_personnalisee.png"

def recapitule():
    """Fonction pour récapituler la largeur, la hauteur,
    la couleur et l'image de la fenêtre turtle"""
    print(f"largeur : {turtle.window_width()} px")
    print(f"hauteur : {turtle.window_height()} px")
    print(f"couleur : {turtle.bgcolor()}")
    print(f"image : {turtle.bgpic()}")
  
if __name__ == "__main__":
    #On ouvre la fenêtre en choisissant dimensions et positions
    turtle.setup(LARGEUR, HAUTEUR, POS_X, POS_Y)
    #On change la couleur de fond
    turtle.bgcolor("yellow")
    #On change l'image de fond
    turtle.bgpic(NOM_IMAGE)
    #On récapitule la configuration de la fenêtre hormis la position
    recapitule()
    #On ferme la fenêtre s'il y a un clique gauche
    turtle.exitonclick()

Voilà, vous êtes désormais capable de configurer votre fenêtre avec turtle. Dans la partie suivante, nous allons voir comment tracer et dessiner.