image image


Tutorial: Tkinter und die Matplotlib

image

Wie es der Zufall so manchmal will, hatte ich mich, kurz bevor Karsten Wolf die Nodebox mit der Matplotlib verheiratete, für eine geplante Python-Schulung damit beschäftigt, wie man die Matplotlib mit Tkinter verkuppelt. Tkinter gehört zum »Lieferumfang« von Python und da lag es nahe, dieses GUI- und Graphik-Toolkit für die Schulung zu verwenden.

Aber warum soll man überhaupt die Matplotlib mit Tkinter verkuppeln? Die naheliegendste Antwort ist natürlich: Weil es geht! Die zweite Antwort ist: Es geht, weil die Matplotlib über ein mitgeliefertes Backend für Tkinter verfügt, das backend_tkagg heißt. Und die dritte und überzeugendste Antwort: Weil man dem sehr altbacken anmutenden Äußeren des Matplotlib-Fensters entgehen will (das übrigens auch eine Tk-Anwendung ist).

Das eigentliche Programm ist kurz und selbsterklärend:

from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import tkinter as tk
import numpy as np

fig = Figure(figsize = (9, 6), 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()

root = tk.Tk()
root.title("Sinus vs. Cosinus")

canvas = FigureCanvasTkAgg(fig, master = root)
canvas._tkcanvas.pack(side = tk.TOP, fill = tk.BOTH, expand = 1)

root.mainloop()

Man beachte, daß die Plot-Befehle xticks, yticks etc. bei Figure etwas anders, nämlich set_xticks, set_yticks und so weiter heißen. Dies ist allerdings nicht konsistent (siehe legend oder grid). Hier hilft nur ein Blick in die Dokumentation.

Caveat: Mit der Einbindung der Matplotlib in Tkinter (wie auch in Nodebox) verlieren die Plots die Möglichkeit, interaktiv während einer Session verändert zu werden, das geht nur in dem (meist mit plt.show()) aufgerufenen interaktiven Fenster der Matplotlib. Dieses hält aber auch die Programmausführung gnadenlos an. Aus diesem Grunde verbietet es sich, plt.show() in einer Tkinter- oder Nodebox-Anwendung aufzurufen (es sei denn, man hat Seltsames vor und weiß wirklich genau, was man tut).


(Kommentieren) 

image image



Über …

Der Schockwellenreiter ist seit dem 24. April 2000 das Weblog digitale Kritzelheft von Jörg Kantel (Neuköllner, EDV-Leiter, Autor, Netzaktivist und 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


Werbung


image  image  image
image  image  image