Feuille de calcul Gtk3 Sgskip

Beginner

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

Introduction

Matplotlib est une bibliothèque Python populaire pour créer des visualisations statiques, animées et interactives en Python. Dans ce laboratoire, vous allez apprendre à intégrer Matplotlib dans une application GTK3 et à interagir avec une treeview pour stocker des données.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans 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.

Configuration de l'environnement

Avant de commencer, nous devons configurer notre environnement. Nous allons commencer par créer un nouveau fichier Python et en importer les bibliothèques nécessaires.

import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Gdk', '3.0')
from gi.repository import Gdk, Gtk
from numpy.random import random
from matplotlib.backends.backend_gtk3agg import FigureCanvas
from matplotlib.figure import Figure

Créer la fenêtre de gestion des données

Dans cette étape, nous allons créer la classe DataManager qui hérite de la classe Gtk.Window. Cette classe sera responsable de la gestion des données que nous voulons tracer.

class DataManager(Gtk.Window):
    num_rows, num_cols = 20, 10
    data = random((num_rows, num_cols))

Configuration de la fenêtre

Dans cette étape, nous allons configurer la fenêtre qui affichera nos données. Nous commencerons par initialiser la fenêtre avec un titre et une taille.

def __init__(self):
    super().__init__()
    self.set_default_size(600, 600)
    self.connect('destroy', lambda win: Gtk.main_quit())
    self.set_title('GtkListStore demo')
    self.set_border_width(8)

Ajouter une étiquette

Dans cette étape, nous allons ajouter une étiquette à la fenêtre qui invitera l'utilisateur à double-cliquer sur une ligne pour tracer les données.

vbox = Gtk.VBox(homogeneous=False, spacing=8)
self.add(vbox)
label = Gtk.Label(label='Double cliquez sur une ligne pour tracer les données')
vbox.pack_start(label, False, False, 0)

Ajouter un TreeView

Dans cette étape, nous allons ajouter un TreeView à la fenêtre qui affichera nos données. Nous allons également créer un modèle pour stocker les données.

sw = Gtk.ScrolledWindow()
sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN)
sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
vbox.pack_start(sw, True, True, 0)
model = self.create_model()
self.treeview = Gtk.TreeView(model=model)
self.treeview.connect('row-activated', self.plot_row)
sw.add(self.treeview)
self.add_columns()

Créer le tracé Matplotlib

Dans cette étape, nous allons créer un tracé Matplotlib qui affichera nos données. Nous commencerons par créer une figure et en ajouter un sous-graphe.

fig = Figure(figsize=(6, 4))
self.canvas = FigureCanvas(fig)
vbox.pack_start(self.canvas, True, True, 0)
ax = fig.add_subplot()

Tracer les données

Dans cette étape, nous allons tracer la première ligne de nos données sur le tracé Matplotlib.

self.line, = ax.plot(self.data[0, :], 'go')

Implémenter la fonctionnalité de tracé

Dans cette étape, nous allons implémenter la fonctionnalité pour tracer les données lorsqu'une ligne est double-cliquée.

def plot_row(self, treeview, path, view_column):
    ind, = path
    points = self.data[ind, :]
    self.line.set_ydata(points)
    self.canvas.draw()

Ajouter des colonnes au TreeView

Dans cette étape, nous allons ajouter des colonnes au TreeView qui afficheront nos données.

def add_columns(self):
    for i in range(self.num_cols):
        column = Gtk.TreeViewColumn(str(i), Gtk.CellRendererText(), text=i)
        self.treeview.append_column(column)

Créer le modèle

Dans cette étape, nous allons créer le modèle qui stockera nos données.

def create_model(self):
    types = [float] * self.num_cols
    store = Gtk.ListStore(*types)
    for row in self.data:
        store.append(tuple(row))
    return store

Afficher la fenêtre

Dans cette étape, nous allons afficher la fenêtre qui affiche nos données.

manager = DataManager()
manager.show_all()
Gtk.main()

Sommaire

Dans ce laboratoire, vous avez appris à intégrer Matplotlib dans une application GTK3 et à interagir avec un TreeView pour stocker des données. Vous avez également appris à tracer des données à l'aide de Matplotlib et à créer un modèle pour stocker des données dans un TreeView.