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

Beispiel - Dialog über eine grafische Benutzeroberfläche

Preisberechnung - jetzt in einem eigenen Fenster

Benutzerdialoge werden heutzutage über eine grafische Benutzeroberfläche geführt.

Grafische Benutzeroberfläche zur Funktion zahlungsbetrag

Die Erstellung solcher Benutzeroberflächen ist etwas komplizierter und wird ausführlich in Kapitel Grafische Benutzeroberflächen behandelt.

Hier der Quelltext zur oben gezeigten grafischen Benutzeroberfläche.

# Funktionsdefinition

def zahlungsbetrag(listenpreis, pRabatt, pMwSt, pSkonto):
    rabatt = (listenpreis / 100) * pRabatt
    nettopreis = listenpreis - rabatt
    mehrwertsteuer = (nettopreis / 100) * pMwSt
    bruttopreis = nettopreis + mehrwertsteuer
    skonto = (bruttopreis / 100) * pSkonto
    endpreis = bruttopreis - skonto
    return endpreis

# Ereignisverarbeitung

def buttonBerechnenClick():
    try:
        # Übernahme der Daten	    
        listenpreis_aktuell = float(entry_listenpreis.get())
        pRabatt_aktuell = float(entry_pRabatt.get())
        pMwSt_aktuell = float(entry_pMwSt.get())
        pSkonto_aktuell = float(entry_pSkonto.get())
        # Verarbeitung der Daten
        ergebnis = zahlungsbetrag(listenpreis_aktuell, pRabatt_aktuell, pMwSt_aktuell, pSkonto_aktuell)
        # Anzeige der Daten
        label_funktionswert.config(text=str(ergebnis))
    except:
        pass

# Erzeugung der GUI
from tkinter import *
# Erzeugung des Fensters
tkFenster = Tk()
tkFenster.title('zahlungsbetrag')
tkFenster.geometry('500x275')
# Rahmen für die Überschrift
frameUeberschrift = Frame(master=tkFenster, background='#FBD975')
frameUeberschrift.place(x=5, y=5, width=490, height=40)
# Label für die Überschrift
labelUeberschrift = Label(master=frameUeberschrift, background='white', text='zahlungsbetrag')
labelUeberschrift.place(x=170, y=10, width=150, height=20)
# Rahmen für die Eingaben
frameEingaben = Frame(master=tkFenster, background='#D5E88F')
frameEingaben.place(x=5, y=50, width=490, height=130)
# Label mit Aufschrift listenpreis
label_listenpreis = Label(master=frameEingaben, background='white', text='listenpreis')
label_listenpreis.place(x=170, y=10, width=150, height=20)
# Entry für listenpreis
entry_listenpreis = Entry(master=frameEingaben)
entry_listenpreis.place(x=10, y=10, width=150, height=20)
# Label mit Aufschrift pRabatt
label_pRabatt = Label(master=frameEingaben, background='white', text='pRabatt')
label_pRabatt.place(x=170, y=40, width=150, height=20)
# Entry für pRabatt
entry_pRabatt = Entry(master=frameEingaben)
entry_pRabatt.place(x=10, y=40, width=150, height=20)
# Label mit Aufschrift pMwSt
label_pMwSt = Label(master=frameEingaben, background='white', text='pMwSt')
label_pMwSt.place(x=170, y=70, width=150, height=20)
# Entry für pMwSt
entry_pMwSt = Entry(master=frameEingaben)
entry_pMwSt.place(x=10, y=70, width=150, height=20)
# Label mit Aufschrift pSkonto
label_pSkonto = Label(master=frameEingaben, background='white', text='pSkonto')
label_pSkonto.place(x=170, y=100, width=150, height=20)
# Entry für pSkonto
entry_pSkonto = Entry(master=frameEingaben)
entry_pSkonto.place(x=10, y=100, width=150, height=20)
# Rahmen für die Ausgaben
frameAusgaben = Frame(master=tkFenster, background='#FFCFC9')
frameAusgaben.place(x=5, y=185, width=490, height=40)
# Label mit Aufschrift return
label_return = Label(master=frameAusgaben, background='white', text='return')
label_return.place(x=170, y=10, width=150, height=20)
# Label für den Funktionswert
label_funktionswert = Label(master=frameAusgaben, background='white', text='')
label_funktionswert.place(x=330, y=10, width=150, height=20)
# Rahmen für die Verarbeitung
frameVerarbeitung = Frame(master=tkFenster, background='#BDE2F3')
frameVerarbeitung.place(x=5, y=230, width=490, height=40)
# Button Berechnen
buttonBerechnen = Button(master=frameVerarbeitung, text='berechnen', command=buttonBerechnenClick)
buttonBerechnen.place(x=170, y=10, width=150, height=20)
# Aktivierung des Fensters
tkFenster.mainloop()

Aufgabe 1

Teste dieses Programm mit grafischer Benutzeroberfläche. Speichere den Quelltext hierzu ab und führe das Programm aus. Du kannst dir gerne auch den Quelltext anschauen und versuchen, die Bestandteile (zumindest in Teilen) zu verstehen.

Erzeugung grafischer Benutzeroberflächen

Mit dem Programm bb_generator.pyw kannst du dir selbst eine grafische Benutzeroberfläche zur Funktionsberechnung erzeugen.

Wenn man dieses Programm ausführt, erhält man eine Benutzeroberfläche, bei der man zunächst die Daten zu einem Black-Box-Diagramm eingeben kann.

Grafische Benutzeroberfläche zur automatisierten Erzeugung von GUIs

Wenn man anschließend auf den Button [GUI erzeugen] klickt, erhält man einen Python-Quelltext zu einem Programm mit grafischer Benutzeroberfläche.

Grafische Benutzeroberfläche zur automatisierten Erzeugung von GUIs

Diesen Python-Quelltext kann man mit dem Button [Quelltext speichern] abspeichern.

Beachte, dass die Funktionsdefinition noch unvollständig ist. Nur der Funktionskopf ist bereits automatisiert erstellt. Den Funktionsrumpf muss man jetzt selbst ergänzen.

Aufgabe 2

Probiere das selbst mit verschiedenen Funktionen aus. Übrigens, du kannst mit dem Black-Box-Generator auch eine Black-Box-Beschreibung (im XML-Format) erzeugen, abspeichern und später wieder laden. Das erleichtert die nachträgliche Bearbeitung von Diagrammen.

X

Fehler melden

X

Suche