Einführung
Matplotlib ist eine beliebte Python-Bibliothek zur Erstellung von statischen, animierten und interaktiven Visualisierungen in Python. In diesem Lab werden Sie lernen, wie Sie Matplotlib in eine GTK3-Anwendung einbetten und mit einem Treeview interagieren, um Daten zu speichern.
Tipps für die VM
Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.
Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.
Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.
Einrichten der Umgebung
Bevor wir beginnen, müssen wir unsere Umgebung einrichten. Wir starten damit, eine neue Python-Datei zu erstellen und die erforderlichen Bibliotheken zu importieren.
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
Erstellen des Datenmanagers-Fensters
In diesem Schritt werden wir die Klasse DataManager erstellen, die von der Klasse Gtk.Window erbt. Diese Klasse wird für das Verwalten der Daten verantwortlich sein, die wir plotten möchten.
class DataManager(Gtk.Window):
num_rows, num_cols = 20, 10
data = random((num_rows, num_cols))
Fenster einrichten
In diesem Schritt werden wir das Fenster einrichten, in dem unsere Daten angezeigt werden. Wir beginnen damit, das Fenster mit einem Titel und einer Größe zu initialisieren.
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)
Fügen Sie eine Bezeichnung hinzu
In diesem Schritt fügen wir einem Fenster eine Bezeichnung hinzu, die den Benutzer auffordert, auf eine Zeile zu doppelklicken, um die Daten zu plotten.
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)
Fügen Sie eine TreeView hinzu
In diesem Schritt fügen wir einer TreeView zum Fenster hinzu, die unsere Daten anzeigen wird. Wir erstellen auch ein Modell, um die Daten zu speichern.
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()
Erstellen des Matplotlib-Diagramms
In diesem Schritt werden wir ein Matplotlib-Diagramm erstellen, das unsere Daten anzeigt. Wir beginnen damit, eine Figur zu erstellen und ein Subplot hinzuzufügen.
fig = Figure(figsize=(6, 4))
self.canvas = FigureCanvas(fig)
vbox.pack_start(self.canvas, True, True, 0)
ax = fig.add_subplot()
Plotten der Daten
In diesem Schritt werden wir die erste Zeile unserer Daten auf dem Matplotlib-Diagramm plotten.
self.line, = ax.plot(self.data[0, :], 'go')
Implementieren der Plotfunktionalität
In diesem Schritt implementieren wir die Funktionalität, um die Daten zu plotten, wenn auf eine Zeile doppelgeklickt wird.
def plot_row(self, treeview, path, view_column):
ind, = path
points = self.data[ind, :]
self.line.set_ydata(points)
self.canvas.draw()
Spalten zur TreeView hinzufügen
In diesem Schritt fügen wir Spalten zur TreeView hinzu, die unsere Daten anzeigen werden.
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)
Modell erstellen
In diesem Schritt erstellen wir das Modell, das unsere Daten speichern wird.
def create_model(self):
types = [float] * self.num_cols
store = Gtk.ListStore(*types)
for row in self.data:
store.append(tuple(row))
return store
Fenster anzeigen
In diesem Schritt zeigen wir das Fenster an, das unsere Daten anzeigt.
manager = DataManager()
manager.show_all()
Gtk.main()
Zusammenfassung
In diesem Lab haben Sie gelernt, wie Sie Matplotlib in eine GTK3-Anwendung einbetten und mit einer TreeView interagieren, um Daten zu speichern. Sie haben auch gelernt, wie Sie Daten mit Matplotlib plotten und wie Sie ein Modell erstellen, um Daten in einer TreeView zu speichern.