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 ?
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.
Articles (313)
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 :