44

などの巨大な肥大化したモジュールを使用せずに、Python でキー リスナーを実行する方法はありますpygameか?

例として、aキーを押すとコンソールに出力されます

a キーが押されました。

また、矢印キー/スペースバー/シフト キーもリッスンする必要があります。

4

6 に答える 6

28

残念ながら、それを行うのはそれほど簡単ではありません。ある種のテキスト ユーザー インターフェイスを作成しようとしている場合は、curses. 端末で通常行うように表示したいが、そのような入力が必要な場合はtermios、残念ながら Python でのドキュメントが不十分なように見える を使用する必要があります。ただし、残念ながら、これらのオプションはどちらもそれほど単純ではありません。さらに、Windows では機能しません。それらを Windows で動作させる必要がある場合は、.pywin32ではなく、またはpywin32の代わりにPDCursesを使用する必要があります。cursestermios


私はこれをまともに機能させることができました。入力したキーの 16 進数表現を出力します。あなたの質問のコメントで言ったように、矢印はトリッキーです。私はあなたが同意すると思います。

#!/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()
于 2012-08-12T01:39:43.790 に答える
17

Python でキー リスナーを実行する方法があります。この機能は、pynputを通じて利用できます。

コマンドライン:

$ pip install pynput

Python コード:

from pynput import keyboard
# your code here
于 2016-08-30T03:21:28.757 に答える