Schlüsseleingabe ist ein vordefiniertes Ereignis. Sie können Ereignisse abfangen, indem Sie event_sequence
(s) an event_handle
(s) anhängen, indem Sie eine oder mehrere der vorhandenen Bindungsmethoden verwenden (bind
, bind_class
, tag_bind
, bind_all
). Um das zu tun:
- definieren eine
event_handle
Methode
- ein Ereignis holen (
event_sequence
), die Ihren Fall von an events list passt
Wenn ein Ereignis eintritt, werden alle diese Bindeverfahren implizit ruft die event_handle
Methode beim Übergeben eines Event
Objekts, das Informationen über Besonderheiten des Ereignisses enthält, das als Argument aufgetreten ist.
Um die Tasteneingabe zu erfassen, könnte man zunächst all '<KeyPress>'
oder '<KeyRelease>'
Ereignisse fangen und dann die jeweiligen Schlüssel durch die Nutzung von event.keysym
Attribute erfahren.
Im Folgenden wird ein Beispiel unter Verwendung von bind
beide '<KeyPress>'
und '<KeyRelease>'
Ereignisse auf einem Widget zu fangen (root
):
try: # In order to be able to import tkinter for
import tkinter as tk # either in python 2 or in python 3
except ImportError:
import Tkinter as tk
def event_handle(event):
# Replace the window's title with event.type: input key
root.title("{}: {}".format(str(event.type), event.keysym))
if __name__ == '__main__':
root = tk.Tk()
event_sequence = '<KeyPress>'
root.bind(event_sequence, event_handle)
root.bind('<KeyRelease>', event_handle)
root.mainloop()
hat tk erfordern eine grafische Fenster? Ich arbeite an einem eingebetteten System. Die sys.strin.read() unten ist verlockend, aber Sie müssen die Eingabetaste drücken. – user391339
@ user391339: Ich denke Tk würde ein Fenstersystem oder eine virtuelle Anzeige erfordern. Für ein eingebettetes System könnte ein "getch" -Rezept wie [dieses] (http://stackoverflow.com/a/21659588/190597) besser sein. – unutbu
Beachten Sie, dass dies nur in Python 3.x funktioniert –