Pylab avec Gtk4 Sgskip

Beginner

This tutorial is from open-source community. Access the source code

Introduction

Dans ce laboratoire, nous allons apprendre à utiliser pyplot pour gérer les fenêtres de figure, mais modifier l'interface graphique en accédant aux widgets GTK sous-jacents. Nous allons créer une figure avec deux tracés et ajouter un bouton à la barre d'outils et une étiquette à la toile. Nous ajouterons également une fonctionnalité pour afficher les coordonnées du curseur lorsqu'il se déplace sur les tracés.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez sur le coin supérieur gauche pour basculer vers l'onglet Carnet pour accéder au carnet Jupyter pour pratiquer.

Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.

Importez les bibliothèques requises

import matplotlib
matplotlib.use('GTK4Agg')
import gi
import matplotlib.pyplot as plt

gi.require_version('Gtk', '4.0')
from gi.repository import Gtk

Nous importons les bibliothèques requises, y compris matplotlib, gi, pyplot et Gtk. Nous définissons le backend de matplotlib pour utiliser GTK4.

Créez la figure et les tracés

fig, ax = plt.subplots()
ax.plot([1, 2, 3], 'ro-', label='easy as 1 2 3')
ax.plot([1, 4, 9], 'gs--', label='easy as 1 2 3 squared')
ax.legend()

Nous créons une figure avec deux sous-graphiques et traçons deux ensembles de données dessus. Nous ajoutons également une légende aux tracés.

Accédez à la barre d'outils et au conteneur vertical (vbox)

manager = fig.canvas.manager
toolbar = manager.toolbar
vbox = manager.vbox

Nous accédons aux attributs toolbar et vbox du gestionnaire de la toile de la figure.

Ajoutez un bouton à la barre d'outils

button = Gtk.Button(label='Click me')
button.connect('clicked', lambda button: print('hi mom'))
button.set_tooltip_text('Click me for fun and profit')
toolbar.append(button)

Nous créons un bouton avec une étiquette et une info-bulle, et le connectons à une fonction qui imprime un message dans la console. Nous ajoutons le bouton à la barre d'outils.

Ajoutez une étiquette à la toile

label = Gtk.Label()
label.set_markup('Drag mouse over axes for position')
vbox.insert_child_after(label, fig.canvas)

Nous créons une étiquette et définissons son texte. Nous ajoutons l'étiquette au conteneur vertical (vbox) après la toile de la figure.

Mettez à jour l'étiquette avec les coordonnées du curseur

def update(event):
    if event.xdata is None:
        label.set_markup('Drag mouse over axes for position')
    else:
        label.set_markup(
            f'<span color="#ef0000">x,y=({event.xdata}, {event.ydata})</span>')

fig.canvas.mpl_connect('motion_notify_event', update)

Nous créons une fonction qui met à jour l'étiquette avec les coordonnées x et y du curseur lorsqu'il se déplace sur les tracés. Nous connectons la fonction à l'événement motion_notify_event de la toile.

Affichez la figure

plt.show()

Nous affichons la figure avec le bouton et l'étiquette ajoutés.

Récapitulatif

Dans ce laboratoire, nous avons appris à utiliser pyplot pour gérer les fenêtres de figures, tout en modifiant l'interface graphique en accédant aux widgets GTK sous-jacents. Nous avons créé une figure avec deux tracés, ajouté un bouton à la barre d'outils et une étiquette à la toile. Nous avons également ajouté une fonctionnalité pour afficher les coordonnées du curseur lorsqu'il se déplace sur les tracés. Ce laboratoire fournit une compréhension de base de la manière de personnaliser l'interface graphique d'une figure matplotlib à l'aide de GTK4.