i

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.

Grafische Benutzeroberfläche

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.

Suche

v
3.2.3.7.1
inf-schule.de/modellierung/ooppython/bank/gui/einstieg_wuerfel

Rückmeldung geben