Ich mache ein Stoppuhr-Programm in Python und möchte wissen, wie man erkennt, ob eine Taste gedrückt wird (z. B. p für Pause und s für Stopp), und ich möchte nicht, dass es so etwas wie raw_input ist, das auf das wartet Benutzereingabe vor Fortsetzung der Ausführung. Weiß jemand, wie man das in einer while-Schleife macht?
Ich möchte diese Plattform auch plattformübergreifend gestalten, aber wenn dies nicht möglich ist, ist mein Hauptentwicklungsziel Linux
python
python-2.7
keypress
detect
Lobuo
quelle
quelle
Antworten:
Python verfügt über ein Tastaturmodul mit vielen Funktionen. Installieren Sie es, möglicherweise mit diesem Befehl:
Verwenden Sie es dann in Code wie:
quelle
keyboard
anscheinend erfordert root in linux: /Für diejenigen, die an Fenstern stehen und Schwierigkeiten hatten, eine funktionierende Antwort zu finden, ist hier meine: pynput
Die obige Funktion druckt die Taste, die Sie drücken, und startet eine Aktion, wenn Sie die Esc-Taste loslassen. Die Tastaturdokumentation dient hier einer abwechslungsreicheren Verwendung.
Markus von Broady hob ein potenzielles Problem hervor: Diese Antwort erfordert nicht, dass Sie sich im aktuellen Fenster befinden, um dieses Skript zu aktivieren. Eine Lösung für Fenster wäre:
quelle
Wie OP über raw_input erwähnt - das heißt, er möchte eine CLI-Lösung. Linux: Flüche ist das, was Sie wollen (Windows PDCurses). Curses ist eine grafische API für CLI-Software, mit der Sie mehr als nur Schlüsselereignisse erkennen können.
Dieser Code erkennt Tasten, bis eine neue Zeile gedrückt wird.
quelle
termios
und so weiter ...import os
werden, um das Beispiel beenden zu können.win.nodelay(False)
stattdessen tunTrue
, werden keine Millionen Ausnahmen pro Sekunde generiert.Es gibt weitere Dinge, die mit dem
keyboard
Modul erledigt werden können.Hier sind einige der Methoden:
Methode 1:
Verwenden der Funktion
read_key()
:Dies wird die Schleife unterbrechen, wenn die Taste pgedrückt wird.
Methode 2:
Funktion verwenden
wait
:Es wartet darauf, dass Sie drücken, pund setzt den Code fort, während er gedrückt wird.
Methode 3:
Verwenden der Funktion
on_press_key
:Es benötigt eine Rückruffunktion. Ich habe verwendet,
_
weil die Tastaturfunktion das Tastaturereignis an diese Funktion zurückgibt.Nach der Ausführung wird die Funktion ausgeführt, wenn die Taste gedrückt wird. Sie können alle Hooks stoppen, indem Sie diese Zeile ausführen:
Methode 4:
Diese Methode wird bereits von user8167727 beantwortet, aber ich bin mit dem von ihnen erstellten Code nicht einverstanden. Es wird die Funktion verwenden,
is_pressed
aber auf andere Weise:Es wird die Schleife brechen, wenn pgedrückt wird.
Anmerkungen:
keyboard
liest Tastendrücke aus dem gesamten Betriebssystem.keyboard
erfordert root unter Linuxquelle
keyboard.wait()
auf mehr als eine Taste warten und fortfahren kann, wenn eine von beiden gedrückt wirdwait()
bietet diese Funktionalität nicht an. Sie müssenkeyboard.read_key()
mit einer if-Bedingung arbeiten, die in einer while-Schleife gepackt ist. Siehe die Methode # 1suppress
Verwendung von Schlüsselwörtern bringenkeyboard.read_key()
, wann und wann nicht ...Für Windows könnten Sie Folgendes verwenden
msvcrt
:quelle
Verwenden Sie diesen Code, um herauszufinden, welche Taste gedrückt wurde
quelle
Verwenden Sie PyGame, um ein Fenster zu haben, und dann können Sie die wichtigsten Ereignisse abrufen.
Für den Brief
p
:quelle
Also habe ich dieses ..kind of game .. basierend auf diesem Beitrag gemacht (mit msvcr library und Python 3.7).
Das Folgende ist die "Hauptfunktion" des Spiels, die das Drücken der gedrückten Tasten erkennt:
Wenn Sie den vollständigen Quellcode des Porgramms möchten, können Sie ihn sehen oder von hier herunterladen:
Das geheime Schlüsselspiel (GitHub)
(Hinweis: Der geheime Tastendruck lautet: Ctrl+ F12)
Ich hoffe, Sie können als Beispiel und Hilfe für diejenigen dienen, die diese Informationen konsultieren.
quelle
Ich würde vorschlagen, dass Sie PyGame verwenden und ein Ereignishandle hinzufügen.
http://www.pygame.org/docs/ref/event.html
quelle
Dies ist aus dem openCV-Paket. Es erkennt einen Tastendruck ohne zu warten.
quelle