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.