Verarbeitung von Ereignissen
Zielsetzung
Die Würfel sollen durch einen Doppelklick auf die entsprechenden Textfelder einzeln aktiviert werden können.
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.
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.