Nach dem gestrigen Beitrag hatte ich Blut geleckt und wollte es genau wissen. Kann man wirklich die Matplotlib so einfach mit PySimpleGUI verkuppeln, wie das auch mit Tkinter möglich war? Spoiler: Man kann!
Und wenn man den Quellcode mit meinem Experiment vor fünf Jahren vergleicht, sieht man, daß – dank des Backendes FigureCanvasTkAgg
– sich kaum etwas von meiner damaligen Tkinter-Version unterscheidet:
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import PySimpleGUI as sg
import numpy as np
fig = Figure(figsize = (6, 4), facecolor = "white")
axis = fig.add_subplot(111)
x = np.linspace(-10, 10, 1000)
axis.plot(x, np.sin(x), "-r", label = "Sinus")
axis.plot(x, np.cos(x), "--g", label = "Cosinus")
axis.set_xticks([-10, 0, 10])
axis.set_yticks([-1, 0, 1])
axis.set_ylim(-2, 2)
axis.set_xlabel("Sinus- und Cosinus-Kurve")
axis.legend()
axis.grid()
def draw_figure(canvas, figure):
figure_canvas_agg = FigureCanvasTkAgg(figure, canvas)
figure_canvas_agg.draw()
figure_canvas_agg.get_tk_widget().pack(side="top", fill = "both", expand = 1)
return figure_canvas_agg
layout = [
[sg.Text("Sinus vs. Cosinus")],
[sg.Canvas(key = "-CANVAS-")],
[sg.Button("Quit")]
]
window = sg.Window("PySimpleGUI Plot-Test",
layout,
element_justification = "center",
font = ("Menlo", 14),
finalize = True,
)
# Add the plot to the window
draw_figure(window["-CANVAS-"].TKCanvas, fig)
event, values = window.read()
window.close()
Okay, PySimleGUI ist etwas geschwätziger als Tkinter, daher bin ich dem Beispiel von RealPython gefolgt und habe die Zeichenbefehle in die Funktion draw_figure()
ausgelagert. Außerdem verlangt PySimpleGUI die Definition des Layouts als geschachtelte Liste und den Aufruf der PySimpleGui.Window()
-Klasse, mit deren Parameter man das Aussehen des GUI beeinflussen kann. Da die Default-Werte eine Beleidigung für meine alten Augen sind, habe ich mit font = ("Menlo", 14)
eine mir genehmere Schrift in einer lesbaren Größe ausgewählt (siehe Screenshot).
Jetzt interessiert mich natürlich noch, ob und wie PySimpleGUI mit Slidern, die das Ausehen der Plots zur Laufzeit verändern, umgehen kann. Kann – beziehungsweise sollte oder muß – man die Matplotlib eigenen Schieberegler verwenden, oder kann man die Slider aus PySimpleGUI verwenden? Und wenn ja, warum nicht? Still digging!
Als weiteres Projekt möchte ich dann auch noch meine »Matplotlib für Arme«, die ich letztes Jahr in Processing.py implementiert hatte (Teil 1 und Teil 2), nach Py5 portieren. Warum? Weil es (hoffentlich!) geht.
Über …
Der Schockwellenreiter ist seit dem 24. April 2000 das Weblog digitale Kritzelheft von Jörg Kantel (Neuköllner, EDV-Leiter Rentner, Autor, Netzaktivist und ehemaliger Hundesportler — Reihenfolge rein zufällig). Hier steht, was mir gefällt. Wem es nicht gefällt, der braucht ja nicht mitzulesen. Wer aber mitliest, ist herzlich willkommen und eingeladen, mitzudiskutieren!
Alle eigenen Inhalte des Schockwellenreiters stehen unter einer Creative-Commons-Lizenz, jedoch können fremde Inhalte (speziell Videos, Photos und sonstige Bilder) unter einer anderen Lizenz stehen.
Der Besuch dieser Webseite wird aktuell von der Piwik Webanalyse erfaßt. Hier können Sie der Erfassung widersprechen.
Diese Seite verwendet keine Cookies. Warum auch? Was allerdings die iframes
von Amazon, YouTube und Co. machen, entzieht sich meiner Kenntnis.
Werbung
Diese Spalte wurde absichtlich leergelassen!