Deutsch English |
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 der Taste r wird ein roter Kreis, Taste b ein blauer und Taste g ein grüner Kreis gezeichnet.
Nach dem Programmstart musst du zuerst mit der Maus in das Grafikfenster klicken, sonst werden die Tastaturklicks im Editorfenster ausgeführt. Programm: #Gp12a.py from gpanel import * def onKeyPressed(key): print(key) if key == 'r' or key == 82: setColor("red") elif key == 'b' or key == 66: setColor("blue") elif key == 'g' or key == 71: setColor("lime") fillCircle(3) makeGPanel(-10, 10, -10, 10, keyPressed = onKeyPressed) print("Use key r, g, or b.") |
Da der Wert der Variablen x, y in einer Funktion geändert wird, müssen diese Variablen als global definiert werden. Programm: #Gp12b.py from gpanel import * def onKeyPressed(key): global x, y if key == 'ArrowUp' or key == 38: y += 2 elif key == 'ArrowDown' or key == 40: y -= 2 elif key == 'ArrowLeft' or key == 37: x -= 2 elif key == 'ArrowRight' or key == 39: x += 2 makeGPanel(-100, 100, -100, 100, keyPressed = onKeyPressed) x = 0 y = 0 setColor("lime") lineWidth(5) print("Use cursor keys to move the cursor!") while True: draw(x, y)
In der Callbackfunktion legst du nur den Zustand fest. Die neuen Koordinaten werden in der Funktion setMove() bestimmt. Die Geschwindigkeit der Bewegung kannst du mit dem Befehl delay() regeln. Programm: #Gp12c.py from gpanel import * def onKeyPressed(key): global state if key == 'ArrowUp' or key == 38: state = 'UP' elif key == 'ArrowDown' or key == 40: state = 'DOWN' elif key == 'ArrowLeft' or key == 37: state = 'LEFT' elif key == 'ArrowRight' or key == 39: state = 'RIGHT' def setMove(): global x, y if state == 'UP': y += 2 elif state == 'DOWN': y -= 2 elif state == 'LEFT': x -= 2 elif state == 'RIGHT': x += 2 makeGPanel(-100, 100, -100, 100, keyPressed = onKeyPressed) x = 0 y = 0 setColor("lime") lineWidth(5) state = '' while True: setMove() draw(x, y) delay(100)
Programm: #Gp12d.py from gpanel import * def onKeyPressed(key): global state if key == 'Escape' or key == 27: state = 'stop' elif key == 'Enter' or key == 13: state = 'go' def setMove(): global x, dx if state == 'go': x = x + dx if x > 80 or x < -80: dx = -dx elif state == 'stop': return makeGPanel(-100, 100, -100, 100, keyPressed = onKeyPressed) x = 0 y = 0 dx = 1 state = '' while True: setMove() pos(x, y) setColor("red") fillCircle(5) delay(10) setColor("white") fillCircle(5.2) |
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 makeGPanel() registriert. Die Callbackfunktion soll grundsätzlich keine längere Programmblocks enthalten. |
ZUM SELBST LÖSEN |
|