Tastaturereignisse in Python
Diese Lektion behandelt Anwendungen, die ohne Verwendung von Funktionsausdrücken oder Funktionsdefinitionen gar nicht möglich wären. Damit wird illustriert, wie wichtig jene sind.
Das folgende Programm erlaubt die Steuerung einer Schildkröte über die Tastatur.
Mit »onkey( Right, 'Right' )« wird festgelegt, daß beim Drücken der Taste → (»'Right'«) die Funktion »Right« aufgerufen werden soll.
Die übergebene Funktion wird von »onkey« ohne Argument aufgerufen. Deswegen muß es eine Funktion sein, die ohne ein Argument aufgerufen werden kann.
Wir nennen eine Funktion, die ohne ein Argument aufgerufen werden kann, hier auch ein Makro.
Das erste Argument von »onkey« muß ein Makro sein.
Dieses Programmbeispiel ist auch noch einmal eine Motivation für die Verwendung von Funktionsdefinitionen, ohne die es kaum geschrieben werden könnte!
- Aussprache
- on key ɑn ki
main.py
from turtle import *
from winsound import Beep
speed( False )def Right():
"""Bewegung nach rechts und vorne"""
Beep( 1000, 100 )
right( 60 )
forward( 50 )
def Left():
"""Bewegung nach links und vorne"""
Beep( 2000, 100 )
left( 60 )
forward( 50 )
onkey( Right, 'Right' )
onkey( Left, 'Left' )
onkey( lambda: Beep( 200, 100 ), ' ' )
listen(); mainloop()
Die genaue Funktion von ›listen‹ und ›mainloop‹ unterscheidet sich bei einigen Python -Implementationen von der Dokumentation. Jedenfalls kann man aber einfach sagen, daß man diese beiden Funktionen im allgemeinen am Endes eines Programms, das ›onkey‹ verwendet, in dieser Reihenfolge aufrufen sollte.
Übersicht der zuvor behandelten Namen
Die folgenden Tabellen beschreiben kurz die zuvor behandelten Namen aus dem Schildkrötenmodul.
- Einstellungen
speed( True ) Verlangsamung aktivieren
speed( False ) ohne Verlangsamung zeichnenpendown() Stift auf Zeichenflaeche absenken
penup() Stift von Zeichenflaeche wegnehmenpensize( p ) Stiftbreite auf p Pixel einstellen
hideturtle() Schildkroete verstecken
showturtle() Sichtbarmachen der Schildkroete- Bewegungen
home() Anfangsposition
left( g ) Linksdrehung um g Grad
right( g ) Rechtsdrehung um g Gradforward( p ) Vorwaertsbewegung um p Pixel
backward( p ) Rueckwaertsbewegung um p Pixel- Farben
colormode( 1 ) Intensitaetsbereich 0.0 bis 1.0
colormode( 255 ) Intensitaetsbereich 0 bis 255bgcolor( r, g, b ) Hintergrundfarbe festlegen
fillcolor( r, g, b ) Fuellfarbe festlegen
pencolor( r, g, b ) Stiftfarbe festlegen- Füllen
begin_fill() Beginn des Fuellbereichs
end_fill() Ende und Fuellen des Fuellbereichs- Interaktion
onkey(f,n) Funktion f fuer Taste namens n festlegen
listen() Dem Fenster den Fokus verleihen
mainloop() Programm nicht beenden und auf Ereignisse reagieren
Ausgewählte Tastenbezeichnungen
Die Ziffern und Buchstabentasten werden durch das jeweilige Zeichen bezeichnet, beispielsweise '5' für die Taste 5 oder 'd' für die Taste D. Die Funktionstasten werden ebenfalls durch sich selbst bezeichnet, beispielsweise »F1«. Es folgen einige ausgewählte Beispiele weiterer Tastenbezeichnungen.
Wenn ein Leerzeichen für die Taste angegeben wird, so scheint dies die Reaktion auf alle Tasten festzulegen, für die keine andere Festlegung getroffen wurde. (Es ist nicht sicher, ob dieses Verhalten von der Dokumentation garantiert wird.)
- Ausgewählte Tastenbezeichnungen (Beispiele)
Leertaste space
Plus plus
Minus minus
A-Umlaut Adiaeresis
a-Umlaut adiaeresis
Eszett ssharp
Ruecktaste BackSpace
Tab Tab
Eingabetaste Return
Esc Escape
Links Left
Oben Up
Rechts Right
Unten Down
Voriges Bild Prior
Naechstes Bild Next
Ende End
Pos 1 Begin
Entf Delete
Übungsaufgaben
Für alle Funktionsdefinitionen in diesem Kapitel soll »def« verwendet werden und nicht »= lambda«.
/ Übungsaufgabe ⃖
Fügen Sie folgende Tastenfunktionen zu dem obenstehenden Programm hinzu:
0 Verstecken der Schildkröte
1 Anzeigen der Schildkröte
/ Übungsaufgabe
Fügen Sie folgende Tastenfunktionen zu dem obenstehenden Programm hinzu:
↑ Stift heben
↓ Stift absenken
/ Übungsaufgabe
Fügen Sie folgende Tastenfunktionen zu dem obenstehenden Programm hinzu:
+ Stift breiter machen
- Stift schmaler machen
Wenn mehrfach + gedrückt wird, soll der Stift also bei jedem Drücken breiter werden als er es vorher war.
Hier muß zur Bezeichnung der beiden Tasten die Zeichenfolge »plus« beziehungsweise »minus« verwendet werden.
/ Übungsaufgabe
Fügen Sie folgende Tastenfunktionen zu dem obenstehenden Programm hinzu:
R Stiftfarbe und Füllfarbe auf eine zufällige Farbe setzen
/ Übungsaufgabe
Fügen Sie folgende Tastenfunktionen zu dem obenstehenden Programm hinzu:
T Text einlesen (mit »textinput«) und schreiben
/ Übungsaufgabe
Ändern Sie die Funktionen für die Tasten ← und → so ab, daß diese die Schildkröte um 45 Grad nach links beziehungsweise rechts drehen, ohne sie zu bewegen.
Die Leertaste soll die Schildkröte um 10 Schritte vorwärts bewegen. Die Rücktaste (»BackSpace«) soll sie um 10 Schritte nach hinten bewegen.
/ Übungsaufgabe
Sie finden, daß die Taste bei »onkey« als erstes Argument angegeben werden sollte (und nicht als zweites)? Fügen Sie Quelltext am Anfang des Skriptes hinzu, der dann am Ende des Skriptes onkey-Aufrufe wie »onkey( key='e', function=e )« erlaubt!
Abfrage der Tastenbezeichnungen
Das folgende Programm gibt die Bezeichnungen (»keysym«s) der im Hauptfenster eingegebenen Tasten aus.
main.py
from tkinter import Tk
from tkinter import Label
from tkinter import Entryroot = Tk()
entry = Entry( root )getattr( entry, 'bind_all' )\
( '<Key>',
lambda event:
print
( f'''(keysym = "{ getattr( event, 'keysym' )}", ''' +
f'''char = "{ getattr( event, 'char' )}".''' ))getattr( entry,'focus_set' )()
getattr( root,'mainloop' )()
Quellen *
- Bezeichnungen der Tasten
www.tcl.tk/man/tcl8.4/TkCmd/keysyms.htm
(infohost.nmt.edu/tcc/help/pubs/tkinter/key-names.html)