Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Anwendung - Eine Ampel mit GUI

Grafische Benutzeroberfläche für eine Ampel

Ziel ist es, eine einfache grafische Benutzeroberfläche zu erzeugen, von der aus ein Objekt der Klasse Ampel aktiviert werden kann. Die GUI soll dabei ganz einfach gestaltet sein.

Grafische Benutzeroberfläche

Wir benutzen eine dokumentierte Implementierung der Klasse Ampel, die sich in der Datei ampel.py befindet.

Klassendiagramm

Der Quelltext zeigt eine einfache Möglichkeit, ein Ampel-Objekt mit einer GUI zu verknüpfen. Wir werden diese Verknüpfungsproblematik in einem der folgenden Abschnitte noch einmal aufgreifen und allgemeiner lösen.

#------------------------------------------------------------------------------
# Datenmodell
#------------------------------------------------------------------------------

from ampel import Ampel
ampel = Ampel('rot')

#------------------------------------------------------------------------------
# GUI
#------------------------------------------------------------------------------

def anzeigeAktualisieren(lampeRot, lampeGelb, lampeGruen):
    if lampeRot:
        labelRot.config(background='red')
    else:
        labelRot.config(background='gray')
    if lampeGelb:
        labelGelb.config(background='yellow')
    else:
        labelGelb.config(background='gray')
    if lampeGruen:
        labelGruen.config(background='green')
    else:
        labelGruen.config(background='gray')

def buttonWeiterClick():
    """Verarbeitung der Daten
       ... Ampel weiter schalten
       Aktualisierung der Anzeige
       ... Lampenzustand abfragen und anzeigen
	"""

from tkinter import *
# Erzeugung des Fensters
fenster = Tk()
fenster.title("Ampel")
fenster.geometry("200x200")
# Rahmen
frameAmpel = Frame(master=fenster, background='darkgray')
frameAmpel.place(x=80, y=20, width=40, height=100)
# Label Rot-Licht
labelRot = Label(master=frameAmpel, background='gray')
labelRot.place(x=10, y=10, width=20, height=20)
# Gelb-Licht
labelGelb = Label(master=frameAmpel, background='gray')
labelGelb.place(x=10, y=40, width=20, height=20)
# Grün-Licht
labelGruen = Label(master=frameAmpel, background='gray')
labelGruen.place(x=10, y=70, width=20, height=20)
# Aktualisierung der Anzeige
(lampeRot, lampeGelb, lampeGruen) = ampel.getLampen()
anzeigeAktualisieren(lampeRot, lampeGelb, lampeGruen)
# Button zum Auswerten
buttonWeiter = Button(master=fenster,
                      text="weiter",
                      command=buttonWeiterClick)
buttonWeiter.place(x=50, y=150, width=100, height=20)
# Start der Ereignisschleife       
fenster.mainloop()

Aufgabe 1

(a) Mache dich mit dem Quelltext vertraut. Ergänze die Ereignisverarbeitungsprozedur und teste das Programm.

(b) Ergänze das Programm so, dass zwei Ampeln simuliert werden.

X

Fehler melden

X

Suche