Erstelle einfaches GUI mit Matplotlib Sinuswelle

Beginner

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

Einführung

In diesem Lab lernst du, wie du mithilfe des Button-Widgets von Matplotlib eine einfache grafische Benutzeroberfläche (GUI) erstellen kannst. Mit der GUI kannst du eine Sinuswelle ändern, indem du die Frequenz mit den Schaltflächen Next und Previous veränderst.

Tipps für die virtuelle Maschine (VM)

Nachdem der Start der VM abgeschlossen ist, klicke in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

Manchmal musst du einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen von Jupyter Notebook nicht automatisiert werden.

Wenn du während des Lernens Probleme hast, kannst du Labby gerne fragen. Gib nach der Sitzung Feedback, und wir werden das Problem für dich prompt beheben.

Importiere die erforderlichen Bibliotheken

Zunächst importieren wir die erforderlichen Bibliotheken, einschließlich matplotlib.pyplot, numpy und Button aus matplotlib.widgets.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import Button

Setze die Anfangsdiagramm ein

Als nächstes legen wir das Anfangsdiagramm fest. Wir werden eine Sinuswelle mit einer Frequenz von 2 Hz mithilfe der arange-Funktion von numpy erstellen und sie mit der plot-Funktion von matplotlib.pyplot darstellen.

freqs = np.arange(2, 20, 3)
fig, ax = plt.subplots()
t = np.arange(0.0, 1.0, 0.001)
s = np.sin(2*np.pi*freqs[0]*t)
l, = ax.plot(t, s, lw=2)

Erstelle die Button-Callback-Funktionen

Jetzt werden wir zwei Callback-Funktionen für die Schaltflächen Next und Previous erstellen. Diese Funktionen werden das Diagramm mit einer neuen Sinuswelle mit einer anderen Frequenz aktualisieren.

class Index:
    ind = 0

    def next(self, event):
        self.ind += 1
        i = self.ind % len(freqs)
        ydata = np.sin(2*np.pi*freqs[i]*t)
        l.set_ydata(ydata)
        plt.draw()

    def prev(self, event):
        self.ind -= 1
        i = self.ind % len(freqs)
        ydata = np.sin(2*np.pi*freqs[i]*t)
        l.set_ydata(ydata)
        plt.draw()

callback = Index()

Erstelle die Schaltflächen Next und Previous

Jetzt werden wir die Schaltflächen Next und Previous mithilfe der add_axes-Funktion von matplotlib.pyplot erstellen und den zuvor erstellten Callback-Funktionen zuweisen, indem wir on_clicked verwenden.

axprev = fig.add_axes([0.7, 0.05, 0.1, 0.075])
axnext = fig.add_axes([0.81, 0.05, 0.1, 0.075])
bnext = Button(axnext, 'Next')
bnext.on_clicked(callback.next)
bprev = Button(axprev, 'Previous')
bprev.on_clicked(callback.prev)

Zeige das Diagramm an

Schließlich werden wir das Diagramm mit der show-Funktion von matplotlib.pyplot anzeigen.

plt.show()

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie mithilfe des Button-Widgets von Matplotlib ein einfaches GUI erstellen. Sie haben gelernt, wie Sie eine Sinuswelle durch Ändern der Frequenz mit den Schaltflächen Next und Previous modifizieren.