Die Werte der Pfeiltasten in Python finden: Warum sind sie Tripel?
Ich versuche zu finden, die Werte, die meinem lokalen system weist Sie auf die Pfeil-Schlüssel, die speziell in Python. Ich benutze folgende script um dies zu tun:
import sys,tty,termios
class _Getch:
def __call__(self):
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
def get():
inkey = _Getch()
while(1):
k=inkey()
if k!='':break
print 'you pressed', ord(k)
def main():
for i in range(0,25):
get()
if __name__=='__main__':
main()
Dann lief ich das Skript, und drücken OBEN UNTEN RECHTS LINKS, die mir in dieser Ausgabe:
$ python getchar.py
you pressed 27
you pressed 91
you pressed 65
you pressed 27
you pressed 91
you pressed 66
you pressed 27
you pressed 91
you pressed 67
you pressed 27
you pressed 91
you pressed 68
Dies ist anomal, weil es suggeriert, dass die Tasten registriert werden, als eine Art triple (27-91-6x) auf meinem system, wie jedes drücken einer Taste dauert, bis Sie drei Instanzen von get(). Im Vergleich dazu werden durch drücken von a,b,c und CTRL-C gibt:
you pressed 97
you pressed 98
you pressed 99
you pressed 3
Kann jemand mir erklären, warum die Werte von meinem Pfeil-Tasten scheinen gespeichert zu werden als verdreifacht? Warum ist das so? Ist das die gleiche, die auf allen Plattformen? (Ich bin mit Debian Linux). Wenn nicht, wie gehe ich bei der Speicherung der Werte den Pfeil-Tasten?
Ziel hier ist, dass ich versuche, ein Programm zu schreiben, die Bedürfnisse richtig zu erkennen Pfeil-Tasten und eine Funktion ausführen, je nachdem, auf welchen Pfeil-Taste gedrückt wurde.
InformationsquelleAutor der Frage Newb | 2014-03-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dass ich es herausgefunden.
Erfuhr ich von hierdass jede Taste wird dargestellt durch eine einzigartige ANSI-escape-code. Dann habe ich gelernt, dass die ANSI-escape-codes variieren je nach system und Anwendung: in meinem terminal, schlagen
cat
und drücken Sie die Pfeil-nach-oben gibt^[[A
in C scheint es zu sein\033[A
usw. Der zweite Teil, der[A
bleibt gleich, aber der code für das vorhergehendeEscape
werden in hex(beginnend mit x), oktaler (beginnend mit einer 0) oder dezimal(keine Führung).Dann öffnete ich die python-Konsole, und steckte das Dreibettzimmer hatte ich bisher erhielt, versucht zu finden, Ihre Charakter-Werte. Es stellte sich heraus,
chr(27)
gab\x1b
chr(91)
gab[
und die Berufungchr
auf65,66,67,68
zurückgegebenA,B,C,D
beziehungsweise. Dann war es klar:\x1b
war der escape-code!Dann habe ich gemerkt, dass eine Pfeil-Taste, im ANSI-dargestellt als eine dreifache, ist natürlich vertreten als drei Zeichen, so musste ich ändern, meinen code so zu Lesen in der drei Zeichen in einer Zeit. Hier ist das Ergebnis:
InformationsquelleAutor der Antwort Newb
Ich bin Mac, und ich verwendete den folgenden code, und es funktionierte gut:
Ich habe die Werte für mein Pfeil-Tasten 0,1,2,3 (Oben, Unten, Links, Rechts):
Immer gut daran zu erinnern, code 27 für die ESC-Taste zu.
Beste Grüße!
InformationsquelleAutor der Antwort Mauricio Alo