ereignisse

12. TASTATUREVENTS

 

 

DU LERNST HIER...

 

wie du den Programmablauf durch Drücken von Tastaturtasten beeinflussen kannst. Ähnlich wie bei den Mausevents, definierst du in einer Callbackfunktion, was beim Drücken einer Tastaturtaste geschehen soll. Die Callbackfunktion wird nicht vom Programm, sondern beim Drücken einer Taste automatisch vom System aufgerufen.

 

 

MUSTERBEISPIELE

 

Beispiel 1: Beim Drücken einer beliebigen Taste zeichnet
die Turtle einen Tritt.
Du definierst eine Callbackfunktion onKeyPressed(key). Diese gibt den nummerischen Code der gedrückten Taste zurück und ruft den Befehl step() auf, mit dem jeweils ein Tritt gezeichnet wird.

Über einen Parameter von makeTurtle() wird die Callbackfunktion registriert. So teilst du dem System mit, dass es diese Funktion bei jedem Tastaturklick aufrufen soll.

 

from gturtle import *

def onKeyPressed(key):
    print(key)
    step()

def step():
    forward(20)
    right(90)
    forward(20)
    left(90)
    
makeTurtle(keyPressed = onKeyPressed)
hideTurtle()
addStatusBar(20)
setStatusText("Press any key!")
► In Zwischenablage kopieren

Die Nummer der gedrückten Taste wird jeweils mit print(key) im Ausgabefenster angezeigt. Teste auch die Cursortasten. Ihre Nummern wirst du im nächsten Beispiel brauchen.
 

 

Beispiel 2: Die Turtle mit Cursortasten steuern.
Die Callbackfunktion onKeyPressed(key) gibt den nummerischen Code der gedrückten Taste zurück. In einer if-elif-Struktur gibst du die Bewegungsrichtung der Turtle an. Wenn eine der Pfeiltaste gedrück wurde, wechselt die Turtle ihre Richtung und bewegt sich danach eine kurze Strecke vorwärts. Damit die Bewegung schneller erfolgt, wählst du speed(-1).

 

 

from gturtle import *

def onKeyPressed(key):
    if key == 37:
        setHeading(-90)
        fd(10)
    elif key == 39:
        setHeading(90)
        fd(10)
    elif key == 38:
        setHeading(0)
        fd(10)
    elif key == 40:
        setHeading(180)
        fd(10)

makeTurtle(keyPressed = onKeyPressed)
speed(-1)
addStatusBar(20)
setStatusText("Use cursor keys to move me!")
► In Zwischenablage kopieren

 

Beispiel 3: Laufende Turtle steuern.
Wie bei einem SnakeGame kannst du die Richtung einer sich ständig bewegenden Turtle mit den Cursortasten LEFT, RIGHT, UP oder DOWN ändern. Damit die Turtle das Fenster nicht verlässt, verwendest du den Wrap-Modus. Unabhängig davon, in welchem Zustand sich das Programm befindet, wird mit Drücken der Cursor-Tasten Left, Right, Up bzw. Down ihre Richtung geändert.

Um den Programmcode übersichtlicher zu halten, verwendest du anstelle der nummerischen Codes der Cursortasten die Variablen LEFT, RIGHT, DOWN und UP.

 
from gturtle import *

LEFT = 37
RIGHT = 39
UP = 38
DOWN = 40

def onKeyPressed(key):
   if key == LEFT:
      setHeading(-90)
   elif key == RIGHT:
      setHeading(90)
   elif key == UP:
      setHeading(0)
   elif key == DOWN:
      setHeading(180)

makeTurtle(keyPressed = onKeyPressed)
setLineWidth(5)
wrap()
addStatusBar(20)
setStatusText("Use cursor keys to move me!")
while True:
    forward(10)
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Die Callbackfunktion onKeyPressed(key) wird nicht von deinem Programm, sondern vom System aufgerufen, wenn du eine Taste gedrückt hast. Die Bezeichnung der Tasten, insbesondere der Spezialtasten kannst du mit print(key) im Ausgabenfester anzeigen.

Die Callbackfunktion wird als Parameter von makeTurtle() registriert.

 

 

ZUM SELBST LÖSEN

 

1.


Beim Drücken der Taste "r" soll ein roter, Taste "g" ein grüner und Taste "b" ein blauer Stern gezeichnet werden

 

 

2.
Beim Drücken einer beliebigen Taste erscheinen zufällig 1, 2, 3, 4, 5 oder 6 gefüllte Kreise.  

3.

Du steuerst mit den Tasten "r", "g" und "y" eine Ampelanlage. Beim Drücken der Taste " r" erscheint die rote Ampel, bei y" die gelbe und bei "g" die grüne.

 


4.

Ergänze das Programm im Beispiel 3 so, dass es Strafpunkte gibt, wenn die Turtle über den Rand des Fensters hinaus läuft. Die Strafpunkte können in der Statusbar angezeigt werden.

Du kannst auch das Turtle-Bild durch das Bild snakehead.gif ersetzen:
makeTurtle("sprites/snakehead.gif", keyPressed = onKeyPressed)