ich habe das gefunden keyboard
Modul in Python, das verwendet wird, um Tastaturereignisse (von dem, was ich hauptsächlich habe) zu protokollieren keyboard.record()
, der einen String als Parameter verwendet und angibt, bei welchem Tastendruck die Funktion beendet werden soll.
Also meine Frage ist ... gibt es eine Möglichkeit, die Funktion bei jedem Tastendruck zu stoppen? Soweit ich weiß, hat das Modul kein spezielles Schlüsselwort, das auf so etwas hinweisen würde.
Als hätte ich das versucht
keys_pressed = keyboard.record(until="any")
Aber das verursacht einen Fehler.
Antworten:
1 für die Antwort № 1Ich sehe keinen Sinn darin, keyboard.record () zu verwenden, wenn Sie nur beim ersten Tastendruck anhalten (und aufnehmen) müssen.
Stattdessen könnten Sie keyboard.read_key () wie folgt verwenden:
import keyboard
k = keyboard.read_key() # in my python interpreter, this captures "enter up"
k = keyboard.read_key() # so repeat the line if in the python interpreter
0 für die Antwort № 2
Nach dem Durchstöbern des Quellcodes sieht es so aus, als wäre dies nicht möglich.
def record(until="escape"):
"""
Records all keyboard events from all keyboards until the user presses the
given key combination. Then returns the list of events recorded, of type
`keyboard.KeyboardEvent`. Pairs well with
`play(events)`.
Note: this is a blocking function.
Note: for more details on the keyboard hook and events see `hook`.
"""
recorded = []
hook(recorded.append)
wait(until)
unhook(recorded.append)
return recorded
Der Parameter until
wird in übergeben wait()
. Somit, wait()
muss Code haben, um einen willkürlichen Tastendruck zu handhaben, den es nicht tut.
def wait(combination=None):
"""
Blocks the program execution until the given key combination is pressed or,
if given no parameters, blocks forever.
"""
wait, unlock = _make_wait_and_unlock()
if combination is not None:
hotkey_handler = add_hotkey(combination, unlock)
wait()
remove_hotkey(hotkey_handler)
Letztendlich gibt es keinen Quellcode, der für so etwas geeignet ist keyboard.record(until="any")
Sie müssen also eine Problemumgehung finden Wie bringe ich Python dazu, auf eine gedrückte Taste zu warten?. Wenn Sie jedoch den beliebigen Schlüssel aufzeichnen müssen, den Sie zum Stoppen der Aufzeichnung verwendet haben, verwenden Sie die Problemumgehung von J-L:
import keyboard k = keyboard.read_key() # in my python interpreter, this captures "enter up" k = keyboard.read_key() # so repeat the line if in the python interpreter
0 für die Antwort № 3
Sie können eine Funktion erstellen, die für alle Tasten einen Haken setzt.
import keyboard
def record_until(any_key=False):
recorded = []
keyboard.hook(recorded.append) # need this to capture terminator
wait, unlock = keyboard._make_wait_and_unlock()
if any_key:
hook = keyboard.hook(unlock)
wait()
try:
keyboard.remove_hotkey(hook)
except ValueError: pass
return recorded
record_until(any_key=True)