Erkennung von Caps Lock in Python Curses

Für eine solche Grundfrage bin ich überrascht, dass ich nichts finden konnte …

Wie auch immer, ich habe eine Flüche App in Python, die bei der Lösung von Rätseln eines bestimmten DSiWare Spiel hilft. Mit ihm können Sie ein Puzzle nehmen und die Komponenten davon individuell kontrollieren. Die Schlüssel qweasdzx werden verwendet, um Fliesen zu malen (die Tasten sind in einer Art Palette angeordnet). Wenn Sie eine dieser Tasten drücken, während Sie Shift-Highlights Fliesen mit dieser Farbe. Ich konnte nicht um ein natürlicheres Kontrollsystem bitten.

Also ist es eine Schande, dass wieder einmal Shift mir Probleme gibt (letztes Mal hatte ich Probleme mit Shift, ich verdiente ein Tumbleweed-Abzeichen). Obwohl dieses Mal, das Problem ist mehr oder weniger Caps Lock, die komplett schraubt mein Programm durch Umkehr der Funktionen.

Wie kann ich den Zustand der Caps Lock in Python mit Flüchen erkennen?

EDIT: Wenn du vorschreibst, ein separates Modul zu benutzen, sollte ich dich wahrscheinlich daran erinnern, dass Flüche – und damit mein Programm – im UNIX-Territorium sind.

    2 Solutions collect form web for “Erkennung von Caps Lock in Python Curses”

    Ich habe eine eigene Lösung gefunden:

    Da Flüche die Caps Lock-Einstellung nach ΤΖΩ® völlig nicht kennen, habe ich eine alternative Lösung ausprobiert. Speziell habe ich nachgeschaut, wie man Caps Lock in einem BASH-Skript überprüft. Was ich gefunden habe, war das:

    Nur Linux Benötigt X-Window-System.

     $ xset q | grep LED > auto repeat: on key click percent: 0 LED mask: 00000000 

    Die letzte 0 in diesem Ausgang (das 66. Zeichen in der Zeichenfolge) ist das Caps Lock Flag. 1 wenn es an ist, wenn es los ist

    Python kann UNIX-Systembefehle mit dem Linux-only-Befehlsmodul ausführen . Befehle scheinen nicht mit Flüchen zu intervenieren.

     >>> import commands >>> # Caps Lock is off. >>> commands.getoutput("xset q | grep LED")[65] '0' >>> # Setting Caps Lock on now. >>> commands.getoutput("xset q | grep LED")[65] '1' 

    Das funktioniert gut für mich; Das ist ein persönliches Skript, und es ist nicht wie mein Programm war nicht schon Linux-exklusiv. Aber ich hoffe jemand hat eine andere, mehr Windows-kompatible Lösung.

    Ich werde diese Selbstbeantwortung jetzt akzeptieren, aber wenn jemand anderes mit einer besseren Arbeitslösung kommen kann, würde ich es gerne sehen.

    Die kurze Antwort: Du kannst nicht.

    Eine längere antwort:

    Curses wurde als terminfo-basierte Bibliothek erstellt, um die Erstellung von zeichenbasierten Benutzeroberflächen unabhängig vom verwendeten for terminal in 'vt220', 'wyse100', … zu erleichtern ( for terminal in 'vt220', 'wyse100', … ).

    Diese Terminals, die über eine serielle Leitung verbunden sind, und die Kommunikation hin und her der Host wurden entweder durch Klartext (Eingabe durch den Benutzer oder Ausgabe durch den Host) oder spezielle Sequenzen ("Escape" Sequenzen, Eingabe durch den Benutzer, wenn spezielle Tasten waren Gedrückt, wie oder Prev , oder Ausgabe durch den Host, wenn spezielle Operationen wie Cursor-Positionierung oder Bildschirm-Clearing angefordert wurde).

    Ich habe keine Kenntnis von einem dummen Terminal, das eine spezielle Sequenz sendet, wann immer die Caps Lock-Taste gedrückt wurde, oder die Host-Abfrage für den Caps Lock-Status; Verriegelungskapitelle war Teil der Arbeit des Terminals, und der Gastgeber brauchte kein Wissen. Dies ist ähnlich wie der Grund, warum man kein Fluchprogramm haben kann, wenn die Steuertaste auf eigene Faust gedrückt wird.

    Alles über Flüche bezieht sich auf terminfo Fähigkeiten; Es gibt keine verwandte Fähigkeit für das, was Sie fragen.

    Python ist die beste Programmiersprache der Welt.