4. Grafiken programmieren
Das Programmieren von Grafiken ist insofern intersessant, weil dabei zum einen weitgehend der eigenen Fantasie freien Lauf gelassen werden kann. Zum anderen ist beim Programmablauf unmittelbar zu erkennen, ob das auf dem Display Dargestellte den eigentlichen Absichten entspricht.
Bei Zahlen ist das so eine Sache. Das Programm berechnet etwas und gibt das Berechnete aus. Das Berechnete – ist man ehrlich – wird eventuell unkritisch hingenommen, schließlich hat es ja der Computer berechnet. Da steht eine Zahl oder stehen mehrere Zahlen auf dem Display – wird schon richtig sein.
Gestaltung von Grafikprogrammen
Jedes der folgenden Grafikprogramme besteht aus der in der Abbildung 1 dargestellten grafischen Benutzeroberfläche – dem Hauptfenster – mit einem darauf platzierten Canvas-Widget.
Canvas-Widget
Wie bereits auf der Seite 1.2 erwähnt, ist ein Canvas-Widget eine Zeichenfläche auf der grafischen Benutzerberfläche – dem Hauptfenster.
In der Tabelle 1 sind die Methoden des Canvas-Widget aufgeführt und werden erklärt.
| Methode | Erklärung |
|---|---|
| create_line(…) | Eine Linie zeichnen |
| create_rectangle(…) | Ein Rechteck zeichnen |
| create_arc(…) | Einen Bogen zeichnen |
| create_oval(…) | Eine Ellipse zeichnen |
| create_polygon(…) | Einen Streckenzug zeichnen |
| create_text(…) | Einen Text ausgeben |
Koordinatensystem des Canvas-Widgets
Das virtuelle Koordinatensystem des Canvas-Widgets ist in der Abbildung 2 dargestellt, wobei die y-Achse des
Koordinatensystems nach
Der Grund, weshalb die y-Achse des Koordinatensystems nach unten gerichtet ist, lag in der Vergangenheit an den Kathodenstrahl-Röhren-Bildschirmen der Computer. Die Pixel wurden auf den Bildschirmen vom Kathodenstrahl zeilenweise von links oben nach rechts unten dargestellt.
Programm »nikolaushaus.py«
Nicht nur zur Weihnachtszeit gilt:
-
Das ist das Haus vom Nikolaus
Wie in der Abbildung 3 allerdings zu sehen ist, steht das »Haus vom Nikolaus« – wie bereits erwähnt – auf dem Kopf, weil es vom Programm in Richtung der y-Achse gezeichnet wird.
Kurios ist allerdings, dass der Text »Haus vom Nikolaus« in Richtung der y-Achse nicht auf dem Kopf steht.
import tkinter as tk
# Funktion
def zeichnen():
canvas.create_line(\
(125, 75), (275, 75), width=2, fill="yellow")
canvas.create_line(\
(275, 75), (275, 225), width=2, fill="yellow")
canvas.create_line(\
(275, 225), (125, 225), width=2, fill="yellow")
canvas.create_line(\
(125, 225), (125, 75), width=2, fill="yellow")
canvas.create_line(\
(125, 75), (275, 225), width=2, fill="yellow")
canvas.create_line(\
(275, 225), (200, 300), width=2, fill="yellow")
canvas.create_line(\
(200, 300), (125, 225), width=2, fill="yellow")
canvas.create_line(\
(125, 225), (275, 75), width=2, fill="yellow")
canvas.create_text(\
(200, 340), text="Haus vom Nikolaus",\
font=("Arial", 18), fill="yellow")
# grafische Benutzeroberfläche
root=tk.Tk()
root.title("Nikolaushaus")
root.geometry("400x400")
root.resizable(False, False)
canvas=tk.Canvas(root, background="blue")
# Funktionsaufruf
zeichnen()
canvas.pack(fill=tk.BOTH, expand=True)
root.mainloop()
| 4. bis 23. Zeile | Die Funktion »zeichnen« wird deklariert. |
| 5. bis 20. Zeile | Gezeichnet werden die Linien des Hauses ausgehend vom Punkt (125, 75) des Canvas-Widgets, wie beim Zeichnen auf einem Blatt Papier ohne den Stift anzuheben. |
| 21. bis 23 Zeile |
Der Text »Haus vom Nikolaus« wird in der Schriftart Arial und der Schriftgröße 18 in
das Canvas-Widget eingefügt.
|
Das Programm verdeutlicht, dass beim Programmieren beachtet werden sollte, dass auf dem Canvas-Widget gezeichnete Grafiken am Display nach unten gerichtet sein können – sozusagen auf dem Kopf stehen.
Allerding fällt nicht bei allen Grafiken auf, dass die y-Achse des Canvas-Widgets auf dem Display nach unten gerichtet ist. Das ist beispielweise in der Abbildung 4 zu erkennen.
Programm »haeuser.py«
Aufgabe A44
Gleichsam gilt nicht nur zur Weihnachtszeit:
-
Das ist das Haus vom Nikolaus undnebenan das vom Weihnachtsmann.
Zeichne auf ein Blatt Papier – wie in der Abbildung 5 dargestellt – die miteinander verbundenen Häuser ohne den Stift anzuheben.
Von welchen Eckpunkten aus können die beiden miteiander verbundenen Häuser gezeichnet werden, ohne den Stift beim Zeichnen anzuheben?
Implementiere ein Programm »haeuser.py« am Computer.
Das Programm soll aus zwei Teilen bestehen:
- einer Funktion »zeichen« zum Zeichnen der Häuser
- der grafischen Benutzeroberfläche – dem Hauptfenster mit dem darauf platzierten Canvas-Widget
Das Programm soll die Linlien in der Reihenfolge auf dem Display zeichen, wie du sie auf dem Blatt Papier gezeichnet hast.
Führe das Programm aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht.
- [1] Zugunsten des Verstehens der Programme sind deren grafische Benutzeroberflächen schlicht gehalten – auf das Wesentliche reduziert.