Tastaturereignisse in Python (Tastaturereignisse in Python), Lektion, Seite 724081
https://www.purl.org/stefan_ram/pub/ereignisfunktionen_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

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 zeichnen

pendown() Stift auf Zeichenflaeche absenken
penup() Stift von Zeichenflaeche wegnehmen

pensize( 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 Grad

forward( 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 255

bgcolor( 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 Entry

root = 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)

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram724081 stefan_ram:724081 Tastaturereignisse in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724081, slrprddef724081, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/ereignisfunktionen_python