Exemple minimal PyGObject et Cairo : animation d'une ligne

Jean-Pierre Bucciol

6 août 2024

Le troisième exemple minimal dans la programmation d'interfaces graphiques en Python 3, Gtk 3 et PyGObject concerne le dessin : comment animer une ligne, et plus généralement un graphique, dans une interface graphique ?

medias/2024/08/20240805-pyobject-cairo-drawing-update-f

Dans cet exemple, on anime une ligne dans une fenêtre toutes les secondes.

#!/usr/bin/python

"""
Exemple minimal PyGObject et Cairo : animation d'une ligne
jpsb
6 août 2024
"""

# ----------------------------------------------------
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib
import math

# ----------------------------------------------------
class Example(Gtk.Window):

    # ----------------------------------------------------
    def __init__(self):
        super().__init__(title="Animation d'une ligne")

        self.darea = Gtk.DrawingArea()
        self.darea.connect("draw", self.on_draw)
        self.darea.set_size_request (200, 200);

        self.add(self.darea)

        self.i = 0

        GLib.timeout_add_seconds(1, self.update)

    # ----------------------------------------------------
    def update(self):

        self.i = self.i + 1
        self.darea.queue_draw()

        return True

    # ----------------------------------------------------
    def on_draw(self, widget, cr):

        w=self.darea.get_size_request().width;
        h=self.darea.get_size_request().height;
        cr.translate(w/2, h/2) 

        cr.set_source_rgb(1, 0, 0)
        cr.set_line_width(5)

        cr.move_to(0,0)
        cr.line_to(w/2*math.cos(self.i*math.pi/4),h/2*math.sin(self.i*math.pi/4))

        cr.stroke()

# ----------------------------------------------------
win = Example()
win.connect("destroy", Gtk.main_quit)
win.show_all()

Gtk.main()

Ici encore, on a besoin de rien pour dessiner dans une fenêtre GTK et tout ce fait via une mise-à-jour toutes les secondes utilisant la commande queue_draw(). Il m'a été curieusement très difficile de trouver cette commande dans la documentation Cairo et GTK. J'ai trouvé encore une fois l'idée dans le tutoriel de ZetCode PyCairo tutorial (en anglais). L'exemple fourni ci-dessus a l'avantage de fonctionner sur les installations actuelles.

← Article précédent
Exemple minimal PyGObject et Cairo : tracé d'une ligne, août 2024
Article suivant →
Une horloge analogique en Python, PyGObject et Cairo, août 2024

Je préfère vraiment les contacts à l'ancienne, par courrier électronique à l’adresse jpsmail(at)free.fr. Antispam : penseras-tu à remplacer (at) par @ dans l’adresse ? Que cela ne t'enpêche pas d'ajouter un commentaire :

Nom :

Commentaire :

Articles (313)

   (*: nécessite un mot de passe.)
↑ Retour en haut de la page