Einstieg - Würfeln
Grafische Benutzeroberfläche zum Würfel
Wir gehen hier von einem sehr einfachen Datenmodell aus. Ein Würfel soll durch ein Objekt der
Klasse Wuerfel dargestellt werden. Die Klasse Wuerfel ist dabei wie folgt
definiert: 
from random import randint
class Wuerfel(object):
    def __init__(self):
        self.augen = 1
    def werfen(self):
        self.augen = randint(1, 6)
Ziel ist es, eine einfache grafische Benutzeroberfläche zu erzeugen, von der aus ein Objekt der
Klasse Wuerfel aktiviert werden kann.
GUI-Objekte und Datenmodellobjekte
Der folgende Quelltext zeigt, wie man eine grafische Benutzeroberfläche zu einem bereits implementierten Datenmodell
erstellt. Wir setzen voraus, dass die Klasse Wuerfel in einer Datei wuerfel.py 
abgespeichert ist, die sich im selben Verzeichnis wie die Datei mit dem folgenden Quelltext befindet.
#-----------------------------------------------------------
# Datenmodell
#-----------------------------------------------------------
from wuerfel import *
wuerfel = Wuerfel()
#-----------------------------------------------------------
# GUI
#-----------------------------------------------------------
from tkinter import *
# Ereignisverarbeitung
def Button_Wuerfel_Click():
    # Verarbeitung der Daten
    wuerfel.werfen()
    # Anzeige der Daten
    labelWuerfel.config(text=str(wuerfel.augen))
# Erzeugung des Fensters
fenster = Tk()
fenster.title("Würfel")
fenster.geometry('120x110')
# Schriftfeld für den Würfel
labelWuerfel = Label(master=fenster, 
                   text=str(wuerfel.augen), 
                   background="#FBD975")
labelWuerfel.place(x=45, y=40, width=30, height=30)
# Button zum Auswerten
buttonWuerfel = Button(master=fenster, 
                       text="Würfel werfen", 
                       command=Button_Wuerfel_Click)
buttonWuerfel.place(x=10, y=80, width=100, height=20)
# Aktivierung des Fensters
fenster.mainloop()
Aufgabe 1
Teste zunächst das Programm. Mache dich auch mit dem Quelltext vertaut. Analysiere insbesondere die Ereignisverarbeitungsprozedur. Ergänze das Programm so, dass man das Werfen von drei Würfeln simulieren kann.
Ein Objekt zur Verwaltung der GUI-Objekte
Der folgende Quelltextauszug zeigt eine andere Implementierung der grafischen Benutzeroberfläche. Hier wird ein zusätzliches Objekt benutzt, um sämtliche GUI-Objekte zu verwalten.
from tkinter import *
class GUIWuerfel(object):
    def __init__(self, wuerfel):
        # Referenzattribute zum Datenmodell
        self.wuerfel = wuerfel
        # Erzeugung des Fensters
        self.fenster = Tk()
        self.fenster.title("Würfel")
        self.fenster.geometry('120x110')
        # Schriftfeld für den Würfel
        self.labelWuerfel = Label(master=self.fenster, text=str(self.wuerfel.augen), bg="#FBD975")
        self.labelWuerfel.place(x=45, y=40, width=30, height=30)
        # Button zum Auswerten
        self.buttonWuerfel = Button(master=self.fenster, text="Würfel werfen",
                                    command=self.Button_Wuerfel_Click)
        self.buttonWuerfel.place(x=10, y=80, width=100, height=20)
    def Button_Wuerfel_Click(self):
        # Verarbeitung der Daten
        self.wuerfel.werfen()
        # Anzeige der Daten
        self.labelWuerfel.config(text=str(self.wuerfel.augen))
Die Erzeugung des GUI-Verwaltungsobjekts und des Datenmodellobjekts kann jetzt in einem eigenen Testprogramm erfolgen.
#-----------------------------------------------------------
# Datenmodell
#-----------------------------------------------------------
from wuerfel import *
wuerfel = Wuerfel()
#-----------------------------------------------------------
# GUI-Objekt
#-----------------------------------------------------------
from guiwuerfel import *
guiwuerfel = GUIWuerfel(wuerfel)
guiwuerfel.fenster.mainloop()
Aufgabe 2
(a) Teste das Programm.
(b) Welche Beziehungen bestehen zwischen den Objekten? Verdeutliche dies mit einem Objekt- und Klassendiagramm.