Verarbeitung von Ereignissen

Zielsetzung

Die Würfel sollen durch einen Doppelklick auf die entsprechenden Textfelder einzeln aktiviert werden können.

Anwendungsfenster

Ereignisse und ihre Verarbeitung

Das folgende Testprogramm zeigt, wie man Prozeduren zur Ereignisverarbeitung an GUI-Objekte anbinden kann.

# -*- coding: iso-8859-1 -*-
from wx import *
from random import randint
# Ereignisverarbeitung

def alleWuerfelWerfen(event):
    # Verwaltung und Verarbeitung der Daten    
    wuerfelA = randint(1,6)
    wuerfelB = randint(1,6)
    wuerfelC = randint(1,6)
    # Anzeige der Daten
    stWuerfelA.SetLabel(str(wuerfelA))
    stWuerfelB.SetLabel(str(wuerfelB))
    stWuerfelC.SetLabel(str(wuerfelC))

def nurWuerfelAWerfen(event):
    # Verwaltung und Verarbeitung der Daten    
    wuerfelA = randint(1,6)
    # Anzeige der Daten
    stWuerfelA.SetLabel(str(wuerfelB))

# Erzeugung des Fensters
app = App()
frame = Frame(parent=None)
frame.SetTitle("Test")
frame.SetSize((128, 145))
frame.SetBackgroundColour("white")
frame.Show()
# Rahmen Würfel
panelWuerfel = Panel(parent=frame)
panelWuerfel.SetSize((110, 100))
panelWuerfel.SetPosition((5, 5))
panelWuerfel.SetBackgroundColour("#FBD975")
# Label mit Überschrift für die Würfel
stUeberschriftWuerfel = StaticText(parent=panelWuerfel, style=ALIGN_CENTRE|ST_NO_AUTORESIZE)
stUeberschriftWuerfel.SetLabel("Würfel")
stUeberschriftWuerfel.SetSize((100, -1))
stUeberschriftWuerfel.SetPosition((5, 5))
stUeberschriftWuerfel.SetBackgroundColour("white")
# Label Würfel A
stWuerfelA = StaticText(parent=panelWuerfel, style=ALIGN_CENTRE|ST_NO_AUTORESIZE)
stWuerfelA.SetLabel("1")
stWuerfelA.SetFont(Font(14, NORMAL, NORMAL, NORMAL))
stWuerfelA.SetSize((30, 25))
stWuerfelA.SetPosition((5, 35))
stWuerfelA.SetBackgroundColour("white")
stWuerfelA.Bind(EVT_LEFT_DCLICK, nurWuerfelAWerfen)
# Label Würfel B
stWuerfelB = StaticText(parent=panelWuerfel, style=ALIGN_CENTRE|ST_NO_AUTORESIZE)
stWuerfelB.SetLabel("1")
stWuerfelB.SetFont(Font(14, NORMAL, NORMAL, NORMAL))
stWuerfelB.SetSize((30, 25))
stWuerfelB.SetPosition((40, 35))
stWuerfelB.SetBackgroundColour("white")
# Label Würfel C
stWuerfelC = StaticText(parent=panelWuerfel, style=ALIGN_CENTRE|ST_NO_AUTORESIZE)
stWuerfelC.SetLabel("1")
stWuerfelC.SetFont(Font(14, NORMAL, NORMAL, NORMAL))
stWuerfelC.SetSize((30, 25))
stWuerfelC.SetPosition((75, 35))
stWuerfelC.SetBackgroundColour("white")
# Button zum Würfeln
bWuerfel = Button(parent=panelWuerfel)
bWuerfel.SetLabel("Würfel werfen")
bWuerfel.SetPosition((5, 75))
bWuerfel.SetSize((100, 20))
bWuerfel.Bind(EVT_BUTTON, alleWuerfelWerfen)
# Aktivierung des Fensters
app.MainLoop()

Es sind hier zwei Möglichkeiten realisiert, Würfel zu aktivieren. Man kann alle Würfel werfen, indem man die Schaltfläche anklickt. Den ersten Würfel (ganz links) kann man zudem durch einen Doppelklick auf das entsprechende Textfeld aktivieren.

Test

Zur Ereignisverarbeitung müssen drei Festlegungen getroffen werden.

Zunächst muss das Ereignis beschrieben werden. Hierzu gibt es in wxpython bestimmte Zeichenketten wie z. B. EVT_LEFT_DCLICK für einen Doppelklick mit der linken Maustaste, die für die Ereignisbeschreibung vorgesehen sind.

Als nächstes muss die Prozedur zur Ereignisverarbeitung (der sogenannte Eventhandler) definiert werden. Diese Prozedur legt fest, mit welchen Aktionen das System auf das auslösende Ereignis reagiert.

Als letztes muss das Ereignis mit dem Eventhandler verbunden werden. Hierzu wird die Operation Bind des betreffenden GUI-Objekts aufgerufen.

Aufgabe 1

Ergänze das chuck-a-luck-Programm so, dass man alle Würfel dort separat aktivieren kann.

X

Fehler melden

X

Suche