Key Zuhörer in Python?

Gibt es eine Möglichkeit, Key-Listener in Python ohne ein riesiges aufgeblähtes Modul wie pygame ?

Ein Beispiel wäre, wenn ich die Taste drückte, würde es auf die Konsole drucken

Die Taste wurde gedrückt!

Es sollte auch auf die Pfeiltasten / Leertaste / Umschalttaste hören.

4 Solutions collect form web for “Key Zuhörer in Python?”

Es ist leider nicht so einfach, das zu tun. Wenn Sie versuchen, irgendeine Art von Text Benutzeroberfläche zu machen, können Sie in curses zu suchen. Wenn du Dinge möchtest, die du normalerweise in einem Terminal haben würdest, sondern auch so was du willst, dann musst du mit termios , was leider in Python schlecht dokumentiert zu sein scheint. Keiner dieser Optionen ist so einfach, aber leider. Außerdem funktionieren sie nicht unter Windows; Wenn du sie brauchst, um unter Windows zu arbeiten, musst du PDCurses als Ersatz für curses oder pywin32 anstatt termios .


Ich konnte das anständig machen. Es druckt die hexadezimale Darstellung der Schlüssel, die Sie eingeben. Wie ich in den Kommentaren deiner Frage gesagt habe, sind Pfeile knifflig; Ich denke, Sie werden zustimmen.

 #!/usr/bin/env python import sys import termios import contextlib @contextlib.contextmanager def raw_mode(file): old_attrs = termios.tcgetattr(file.fileno()) new_attrs = old_attrs[:] new_attrs[3] = new_attrs[3] & ~(termios.ECHO | termios.ICANON) try: termios.tcsetattr(file.fileno(), termios.TCSADRAIN, new_attrs) yield finally: termios.tcsetattr(file.fileno(), termios.TCSADRAIN, old_attrs) def main(): print 'exit with ^C or ^D' with raw_mode(sys.stdin): try: while True: ch = sys.stdin.read(1) if not ch or ch == chr(4): break print '%02x' % ord(ch), except (KeyboardInterrupt, EOFError): pass if __name__ == '__main__': main() 

Hier ist, wie kann es unter Windows:

 """ Display series of numbers in infinite loop Listen to key "s" to stop Only works on Windows because listening to keys is platform dependent """ # msvcrt is a windows specific native module import msvcrt import time # asks whether a key has been acquired def kbfunc(): #this is boolean for whether the keyboard has bene hit x = msvcrt.kbhit() if x: #getch acquires the character encoded in binary ASCII ret = msvcrt.getch() else: ret = False return ret #begin the counter number = 1 #infinite loop while True: #acquire the keyboard hit if exists x = kbfunc() #if we got a keyboard hit if x != False and x.decode() == 's': #we got the key! #because x is a binary, we need to decode to string #use the decode() which is part of the binary object #by default, decodes via utf8 #concatenation auto adds a space in between print ("STOPPING, KEY:", x.decode()) #break loop break else: #prints the number print (number) #increment, there's no ++ in python number += 1 #wait half a second time.sleep(0.5) 

Es gibt einen Weg, um Schlüsselhörer in Python zu tun. Diese Funktionalität ist über pynput verfügbar.

Befehlszeile:

 > pip install pynput 

Python-Code:

 from pynput import ket,listener # your code here 

Ich suchte nach einer einfachen Lösung ohne Fensterfokus. Jayks Antwort, pynput, funktioniert perfekt für mich. Hier ist das Beispiel, wie ich es benutze.

 from pynput import keyboard def on_press(key): try: k = key.char # single-char keys except: k = key.name # other keys if key == keyboard.Key.esc: return False # stop listener if k in ['1', '2', 'left', 'right']: # keys interested # self.keys.append(k) # store it in global-like variable print('Key pressed: ' + k) return False # remove this if want more keys lis = keyboard.Listener(on_press=on_press) lis.start() # start to listen on a separate thread lis.join() # no this if main thread is polling self.keys 
Python ist die beste Programmiersprache der Welt.