Ich muss wissen, welche Taste gedrückt wird, aber brauche nicht den Code des Charakters, ich möchte wissen, wenn jemand die 'A' Taste drückt, auch wenn der Schlüssel 'a' oder 'A' ist, und so mit alle anderen Schlüssel.
Ich kann PyGame oder eine andere Bibliothek (einschließlich Tkinter) nicht verwenden. Nur Python-Standardbibliothek. Und das muss in einem Terminal gemacht werden, nicht in einer grafischen Schnittstelle.
BENÖTIGT NICHT DEN CHARAKTERCODE. Ich muss den Schlüsselcode kennen.
Beispiel:
%Vor%Siehe tty Standardmodul. Mit tty.setcbreak können Sie vom standardmäßigen zeilenorientierten (gekochten) Modus in den char-orientierten (cbreak) Modus wechseln (sys.stdin) . Das Lesen eines einzelnen Zeichens aus sys.stdin führt zur nächsten gedrückten Tastaturtaste (wenn es Code generiert):
%Vor%Hinweis: Lösung ist nur Unix (einschließlich Linux).
Bearbeiten: Unter Windows versuchen Sie msvcrt.getche () / getwche () . / Ich kann nirgends mehr versuchen ...
Bearbeiten 2: Verwenden Sie die Win32 Low-Level-Konsolen-API über ctypes.windll (siehe beispiel bei SO ) mit ReadConsoleInput
function. Sie sollten keypresses - e.EventType==KEY_EVENT
herausfiltern und nach e.Event.KeyEvent.wVirtualKeyCode
value suchen. Anwendungsbeispiel (nicht in Python, nur um eine Idee zu bekommen) finden Sie unter Ссылка .
Je nach dem, was Sie erreichen möchten, könnte die Verwendung einer Bibliothek wie pygame das tun, was Sie möchten. Pygame enthält eine erweiterte Tastenbedienung, die normalerweise mit Pythons Standardbibliotheken möglich ist.
Sie müssen wahrscheinlich Tkinter verwenden, was die 'Standard' Python-GUI ist und in Python enthalten ist für viele Jahre.
Eine Befehlszeilenlösung ist wahrscheinlich nicht verfügbar, da Daten in Befehlszeilenprozesse hinein und aus ihnen heraus übertragen werden. GUI-Programme (von irgendeinem Geschmack oder anderem) empfangen alle Benutzereingaben durch einen (möglicherweise in einer Bibliothek eingebetteten) Ereignisstrom. Jede Veranstaltung wird eine Aufzeichnung der Details der Veranstaltung sein. Bei Tastenanschlagsereignissen kann der Datensatz einen Schlüsselcode, ein Modifizierschlüssel-Bitfeld oder ein Textzeichen in einer Codierung enthalten. Welche Felder und wie sie benannt werden, hängt von der Ereignisbibliothek ab, die Sie aufrufen.
Befehlszeilenprogramme empfangen Benutzereingaben über Zeichenströme. Es gibt keine Möglichkeit, Daten auf niedrigerer Ebene zu erfassen. Wie myroslav in seinem Beitrag erklärt hat, können tty's im gekochten oder ungekochten Modus sein, der einzige Unterschied ist, dass das Terminal im Kontrollmodus (einige) Steuerzeichen für Sie verarbeitet, wie Löschen und Enter, so dass der Prozess stattdessen Eingabezeilen erhält von 1 Zeichen gleichzeitig.
Verarbeitung von etwas niedrigerem als das erfordert (Betriebssystem abhängig) Systemaufrufe oder Öffnen von Zeichengeräten in / dev. Pythons Standardbibliothek bietet dafür keine Standardfunktion.
Wenn Sie nur in Windows arbeiten müssen, sollten Sie msvcrt ausprobieren.
Die offensichtliche Antwort:
%Vor%oder in anderen (Schlüssel-) Wörtern:
%Vor%usw. ...
Hier ist eine Implementierung der getch-Funktion, die sowohl auf Windows- als auch auf Linux-Plattformen funktioniert basierend auf diesem Rezept :
%Vor%Diese Funktion gibt den Code für das Großbuchstabe zurück:
%Vor%und dies ist für den Kleinbuchstabencode:
%Vor%dieser Weg ist viel einfacher, und Sie müssen keine externen Bibliotheken importieren.
Sie müssen eine der zwei Methoden auswählen, um die 'someFunction' zu sein, die Sie in Ihrer Frage beschrieben haben. Hier ist ein Beispiel:
AUSGABE:
%Vor%