Graphique

A propos

Cette librairie permet l’affichage d’une fenêtre graphique dynamique et fournie des fonctions permettant d’y afficher des objets géométriques simples (point, cercle, segment, vecteur, rectangle).

Basée sur pygame, vous pouvez également récupérer les événements clavier ou souris pour interagir avec l’utilisateur.

Vous pouvez, par exemple, l’utiliser pour construire un jeux de type pong.

Utilisation

Voici un exemple qui affiche une fenêtre graphique traversée en diagonale par un point.

# On importe la librairie
from pydiderotlibs.graphique import *
# Nous aurons également de la librairie time
from time import *

# On initialise les coordonnées du point au coin haut gauche de la fenêtre
x = 0
y = 0

# On créé la fenêtre graphique
creer_fenetre()

# Boucle principale
while 1:
    # Il est important d’appeler la fonction demande_evenements() qui gère la fermeture de la fenêtre
    demande_evenements()

    # Trace un cercle au coordonnées (x,y)
    cercle(x, y)
    # Attend un dixième de secondes
    sleep(0.1)
    # Efface le cercle
    cercle(x, y, couleur='blanc')
    # Ajoute le vecteur vitesse aux coordonnées du point
    x += 1
    y += 1

Note

Il est important d’appeler la fonction demande_evenements() qui gère la fermeture de la fenêtre

Événements

La fonction demande_evenements() permet une gestion simplifiée des entrées clavier et souris de l’utilisateur.

Elle retourne un dictionnaire contenant les touches pressées, les clics et déplacement souris.

Touches clavier

  • Les touches spéciales sont présentes sous la forme: 'haut', 'bas', 'gauche', 'droite' et 'espace'
  • Les touches alphanumériques sont présentes sous leur forme ascii: 'a', 'b',… ';',…

Vous pouvez par exemple tester si les touches 'haut' et 'a' sont pressées :

# On importe la librairie graphique
from pydiderotlibs.graphique import *
# On créé la fenêtre graphique
creer_fenetre()

# Boucle principale
while 1:

    evenements = demande_evenements()
    if 'haut' in evenements:
        print('la touche "haut" est enfoncée')
    if 'a' in evenements:
        print('la touche "a" est enfoncée')

Et la souris?

  • Un clic sur le bouton gauche de la souris sera présent sous la forme 'clic'. Sa valeur contiendra les coordonnées de la souris au moment du clic.
  • Un déplacement de souris sera présent sous la forme 'souris'. Sa valeur contiendra les coordonnées de la souris après le déplacement.

Vous pouvez par exemple tester si un utilisateur bouge la souris ou clique et récupérer les coordonnées de la souris:

# On importe les librairie et time
from pydiderotlibs.graphique import *
# On créé la fenêtre graphique
creer_fenetre()

# Boucle principale
while 1:
    evenements = demande_evenements()

    if 'souris' in evenements:
        # ici evenements['souris'] est une liste [x, y]
        print("Nouvelle abscisse : " + str(evenements['souris'][0]))

    if 'clic' in evenements:
        # ici evenements['clic'] est une liste [x, y]
        print('clic aux coordonées ' + str(evenements['clic']))

Rafraîchissement automatique

Par défaut, cette librairie rafraîchit automatiquement l’affichage a chaque modification de la fenêtre: création de point, de cercle, …

Cela simplifie l’utilisation dans des cas simples mais, si vous souhaitez créer un programme complexe qui modifie fréquemment la fenêtre graphique, cela va créer des scintillements désagréables et ralentir le programme.

Vous pouvez désactiver ce rafraîchissement automatique en passant l’argument autorefresh=fasle à la fonction fenetre(). Il faudra alors appeler la fonction rafraichir() lorsque vous voulez rafraîchir l’affichage de la fenêtre graphique.

Notre exemple de départ devient alors:

# On importe la librairie
from pydiderotlibs.graphique import *
# Nous aurons également de la librairie time
from time import *

# On initialise les coordonnées du point au coin haut gauche de la fenêtre
x = 0
y = 0

# On créé la fenêtre graphique en passant l'argument autorefresh=false
creer_fenetre(autorefresh=False)

# Boucle principale
while 1:
    # Il est important d’appeler la fonction demande_evenements() qui gère la fermeture de la fenêtre
    demande_evenements()

    # Trace un cercle au coordonnées (x,y)
    trace_cercle(x, y)
    # On actualise la fenêtre graphique
    rafraichir()
    # Attend un dixième de secondes
    sleep(0.1)
    # Efface le cercle
    trace_cercle(x, y, couleur='blanc')
    # Ajoute le vecteur vitesse aux coordonnées du point
    x += 1
    y += 1

Couleurs

../_images/couleurs.png

Les formats de couleurs acceptés sont:

  • Une chaîne de caractères (str) en francais dans la liste ci-contre ('rouge' par exemple).
  • Une chaîne de caractères représentant la couleur sous forme hexadécimale. Par exemple la couleur rouge est '#FF0000'.
  • Un tuple RVB (r, v, b)r, v, b sont des entiers entre O et 255 . Par exemple la couleur rouge est (255, 0, 0).
  • Une chaîne de caractère en anglais dans la liste suivante: 'black', 'white','grey', 'red', 'green', 'blue', 'yellow', 'pink', 'purple'.

Documentation

fenetre(largeur=600, hauteur=500, orientation_axe_ordonnees=False, titre='Fenetre graphique', autorefresh=True)[source]

Crée et affiche une fenêtre graphique.

Alias: window(), creer_fenetre()

Paramètres:
  • largeur (int, optionnel) – Largeur de la fenetre en pixels (600 par défaut)
  • hauteur (int, optionnel) – Hauteur de la fenetre en pixels (500 par défaut)
  • orientation_axe_ordonnees – Si on met cet argument à True, l’axe des ordonnées sera orienté de bas en haut comme en maths. Sinon il est orienté dans l’autre sens comme habituellement en informatique (False par défaut)
  • titre (str, optionnel) – Titre de la fenetre (Fenetre graphique par défaut)
  • autorefresh (bool, optionnel) – Active le rafraichissement automatique de la fenetre graphique (False par défaut)
rafraichir()[source]

Rafraîchie la fenêtre graphique. C’est uniquement utile si vous désactivez l’option autorefresh.

demande_evenements()[source]

Récupère les évenements pygame gère la fermeture de la fenetre et retourne les évenements formatés.

Renvoie un dictionnaire d’évenements formaté comme suit: {'touche1': None, 'touche2':None, 'souris': [x,y], 'click': [x,y]}

Les valeurs None pour les touches peuvent surprendre mais il est nécéssaire d’utiliser un dictionnaire pour avoir les coordonnées éventuelles de la souris lors d’un click par exemple. Pour les touches clavier, l’importance est la présence de la cléf et la valeur associée est donc None.

  • Les caractères alphanumériques sont encodés en ascii ('a', 'n', ';') et, si présent, leur valeur est None.
  • les touches spéciales ont les clefs 'espace', 'haut', 'bas', 'droite', 'gauche' et, si présent, leur valeur est None.
  • Un clic avec le bouton gauche de la souris ajoute une clef 'clic'. Sa valeur est une liste [x, y] des coordonnées de la souris.
  • Un déplacement de la souris ajoute une clef 'souris'. Sa valeur est une liste [x, y] des coordonnées de la souris.

Alias: events(), ecoute_evenements()

efface(couleur='blanc')[source]

Efface l’écran.

Paramètres:couleur (couleur, optionnel) – Couleur de remplissage de l’écran ('blanc' par défaut).
cercle(x, y, couleur='bleu', rayon=25, epaisseur=0)[source]

Trace un cercle dans la fenetre graphique.

Alias: circle(), trace_cercle()

Paramètres:
  • x (int) – Abscisse du centre du cercle
  • y (int) – Ordonnée du centre du cercle
  • rayon (int, optionnel) – Rayon du cercle (25 par défaut)
  • epaisseur (int, optionnel) – Epaisseur du cercle (0 par défaut). Si 0, le cercle sera rempli et apparaitra comme un disque.
  • couleur (couleur, optionnel) – Couleur du cercle (bleu par défaut)
cercle_aleatoire(couleur='bleu', rayon=5, epaisseur=0)[source]

Trace un (petit) cercle dans la fenetre graphique, à un endroit choisit au hasard. (Utile pour fairre de la neige par exemple.)

Alias: random_circle(), randcircle(), trace_cercle_aleatoire()

Paramètres:
  • rayon (int, optionnel) – Rayon du cercle (5 par défaut)
  • epaisseur (int, optionnel) – Epaisseur du cercle (0 par défaut). Si 0, le cercle sera rempli et apparaitra comme un disque.
  • couleur (couleur, optionnel) – Couleur du cercle (bleu par défaut)
point(x, y, couleur='bleu')[source]

Trace un point dans la fenetre graphique.

Alias: trace_point()

Paramètres:
  • x (int) – Abscisse du point
  • y (int) – Ordonnée du point
  • couleur (couleur, optionnel) – Couleur du point (bleu par défaut)
rectangle(x, y, largeur=100, hauteur=50, couleur='bleu', epaisseur=0)[source]

Trace un rectangle horizontal dans la fenetre graphique .

Le sommet haut-gauche à pour coordonnées (x,y), la largeur est la taille en abscisse et la hauteur la taille en ordonnée.

Alias: trace_rectangle()

Paramètres:
  • x (int) – abscisse du sommet haut gauche du rectangle
  • y (int) – ordonnée du sommet haut gauche du rectangle
  • largeur (int) – taille du rectangle sur l’axe des abscisses
  • hauteur (int) – taille du rectangle sur l’axe des ordonnées
  • couleur (couleur, optionnel) – Couleur du rectangle (bleu par défaut)
  • epaisseur (int, optionnel) – Epaisseur des cotés du rectangle (0 par défaut). Si 0, le rectangle est rempli.
triangle(x1, y1, x2, y2, x3, y3, couleur='bleu', epaisseur=0)[source]

Trace un triangle dans la fenetre graphique .

Alias: trace_triangle()

Paramètres:
  • x1 (int) – abscisse du premier sommet du triangle
  • y1 (int) – ordonnée du premier sommet du triangle
  • x2 (int) – abscisse du deuxième sommet du triangle
  • y2 (int) – ordonnée du deuxième sommet du triangle
  • x3 (int) – abscisse du troisième sommet du triangle
  • y3 (int) – ordonnée du troisième sommet du triangle
  • couleur (couleur, optionnel) – Couleur du triangle (bleu par défaut)
  • epaisseur (int, optionnel) – Epaisseur des cotés du triangle (0 par défaut). Si 0, le triangle est rempli.
segment(x1, y1, x2, y2, couleur='bleu', epaisseur=2)[source]

Trace un segment entre les points de coordonées (x1, y1) et (x2, y2).

Alias: trace_segment()

Paramètres:
  • x1 (int) – abscisse de la première extremité du segment
  • y1 (int) – ordonnée de la première extremité du segment
  • x2 (int) – abscisse de la deuxieme extrémité du segment
  • y2 (int) – ordonnée de la deuxieme extrémité du segment
  • couleur (couleur, optionnel) – Couleur du segment (bleu par défaut)
  • epaisseur (int, optionnel) – Epaisseur du segment (2 par défaut)
vecteur(x, y, v, couleur='rouge', epaisseur=2)[source]

Trace la représentation du vecteur v à partir du point d’origine (x, y).

Alias: vector(), trace_vecteur()

Paramètres:
  • x (int) – abscisse du point d’origine de la représentation du vecteur
  • y (int) – ordonnée du point d’origine de la représentation du vecteur
  • v (list) – Coordonnées de la deuxieme extrémité du segment
  • couleur (couleur, optionnel) – Couleur du segment (rouge par défaut)
  • epaisseur (int, optionnel) – Epaisseur du segment (2 par défaut)
vecteur2(xv, yv, couleur='rouge', epaisseur=2)[source]

Trace la représentation du vecteur de coordonnées (xv, yv) à partir d’une origine choisie au hasard.

Alias: vector2(), trace_vecteur2()

Paramètres:
  • xv (int) – abscisse du vecteur
  • yv (int) – ordonnée du vecteur
  • couleur (couleur, optionnel) – Couleur du segment (rouge par défaut)
  • epaisseur (int, optionnel) – Epaisseur du segment (2 par défaut)
image(x, y, nom, largeur=100, hauteur=100)[source]

Trace une image dans la fenetre graphique.

Alias:trace_image()

Paramètres:
  • x (int) – Abscisse du centre de l’image
  • y (int) – Ordonnée du centre de l’image
  • nom (str) – nom du fichier image (qui doit être dans le répertoire du script)
  • largeur (int, optionnel) – Largeur de l’image (100 par défaut)
  • hauteur (int, optionnel) – Hauteur de l’image (100 par défaut)
explosion(x, y, couleur='orange', r=25, c=0.5, n=10)[source]

Trace un polygône régulier étoilé à 2n côté, de rayon extérieur r, et tel que le rayon intérieur est égal à c*r (pour c=0, le polygône est réduit à n rayons du cencle de rayon r pour c=1, c’est un polygône régulier à 2n côtés)

Alias: trace_explosion()

Paramètres:
  • x (int) – Abscisse du centre de l’explosion
  • y (int) – Ordonnée du centre de l’explosion
  • couleur (couleur, optionnel) – Couleur (orange par défaut)
  • r (int) – Rayon extérieur
  • c (float) – Coefficient pour obtenir le rayon intérieur égal à c*r
  • n (int) – Nombre de sommets
axes(color='noir')[source]

Dessine les axes de coordonnées pour une meilleure compréhension par les élèves.

Alias: trace_axes()

texte(message, x, y, police='', taille=12, couleur='noir')[source]

Affiche un texte dans la fenetre graphique.

Paramètres:
  • message (str) – le texte à afficher
  • x (int) – abscisse du début du texte
  • y (int) – ordonnée du haut du début du texte
  • police (str, optionnel) – la police de caractère à utiliser. Si non renseigné ou si la police n’est pas installée, on utilise la police de caractère défaut du system
  • taille (int, optionnel) – taille du texte
  • couleur (couleur, optionnel) – couleur du texte
polices_disponibles()[source]

Retourne les polices caractères disponibles

test_police(police)[source]

Test si une police de caractère est installée.

Paramètres:police (str) – police de caractère à tester
Renvoie:True si la police est installée, False sinon