Gtk3 Spreadsheet Sgskip

PythonPythonBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Matplotlib es una popular biblioteca de Python para crear visualizaciones estáticas, animadas e interactivas en Python. En este laboratorio, aprenderá a integrar Matplotlib en una aplicación GTK3 e interactuar con una vista de árbol para almacenar datos.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de operaciones no puede automatizarse debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje su retroalimentación después de la sesión y resolveremos el problema rápidamente para usted.

Configurar el entorno

Antes de comenzar, necesitamos configurar nuestro entorno. Empezaremos creando un nuevo archivo de Python e importando las bibliotecas necesarias.

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

Crear la ventana del administrador de datos

En este paso, crearemos la clase DataManager que hereda de la clase Gtk.Window. Esta clase se encargará de administrar los datos que queremos representar gráficamente.

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

Configurar la ventana

En este paso, configuraremos la ventana que mostrará nuestros datos. Empezaremos inicializando la ventana con un título y un tamaño.

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)

Agregar una etiqueta

En este paso, agregaremos una etiqueta a la ventana que le pedirá al usuario que haga doble clic en una fila para graficar los datos.

vbox = Gtk.VBox(homogeneous=False, spacing=8)
self.add(vbox)
label = Gtk.Label(label='Double click a row to plot the data')
vbox.pack_start(label, False, False, 0)

Agregar un TreeView

En este paso, agregaremos un TreeView a la ventana que mostrará nuestros datos. También crearemos un modelo para almacenar los datos.

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()

Crear la gráfica de Matplotlib

En este paso, crearemos una gráfica de Matplotlib que mostrará nuestros datos. Empezaremos creando una figura y agregando un subgráfico.

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

Graficar los datos

En este paso, graficaremos la primera fila de nuestros datos en la gráfica de Matplotlib.

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

Implementar la funcionalidad de trazado

En este paso, implementaremos la funcionalidad para trazar los datos cuando se hace doble clic en una fila.

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

Agregar columnas al TreeView

En este paso, agregaremos columnas al TreeView que mostrarán nuestros datos.

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)

Crear el modelo

En este paso, crearemos el modelo que almacenará nuestros datos.

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

Mostrar la ventana

En este paso, mostraremos la ventana que muestra nuestros datos.

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

Resumen

En este laboratorio, aprendiste cómo integrar Matplotlib en una aplicación GTK3 y cómo interactuar con un treeview para almacenar datos. También aprendiste cómo trazar datos utilizando Matplotlib y cómo crear un modelo para almacenar datos en un treeview.