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.

Bild 79
Abbildung 1: Grafische Benutzeroberfläche[1]

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.

Tabelle 1: Methoden des Canvas-Widget
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 unten (Süden) gerichtet ist (vergleiche auch Seite 1.2 und Seite 1.2.1.

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.

Bild 80
Abbildung 2: Das Koordinatensystem bei dem das »Haus vom Nikolaus« auf dem Kopf steht

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.

Bild 82
Abbildung 3: Ausgabe des Programms auf dem Display

Kurios ist allerdings, dass der Text »Haus vom Nikolaus« in Richtung der y-Achse nicht auf dem Kopf steht.

Quelltext des Programms »nikolaushaus.py«
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()

Erklärungen zum Quelltext
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.
  • Dabei ist der Punkt (200, 340) der Mittelpunkt des Textes auf dem Canvas-Widget.

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.

Bild 81
Abbildung 4: Kein Problem hat der Betrachter bei der Grafik des gefüllten Kreises

Programm »haeuser.py«

Übung

Aufgabe A44

Gleichsam gilt nicht nur zur Weihnachtszeit:

  • Das ist das Haus vom Nikolaus und nebenan das vom Weihnachtsmann.

Zeichne auf ein Blatt Papier – wie in der Abbildung 5 dargestellt – die miteinander verbundenen Häuser ohne den Stift anzuheben.

Bild 83
Abbildung 5: Die miteinander verbundenen Häuser vom Nikolaus und Weihnachsmann

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. [1] Zugunsten des Verstehens der Programme sind deren grafische Benutzeroberflächen schlicht gehalten – auf das Wesentliche reduziert.