回答:
Pythonには、多くの機能を備えたキーボードモジュールがあります。おそらく次のコマンドでインストールしてください:
pip3 install keyboard
次に、次のようなコードで使用します。
import keyboard # using module keyboard
while True: # making a loop
try: # used try so that if user pressed other than the given key error will not be shown
if keyboard.is_pressed('q'): # if key 'q' is pressed
print('You Pressed A Key!')
break # finishing the loop
except:
break # if user pressed a key other than the given key the loop will break
keyboard
どうやらLinuxでrootが必要:/
Windowsを使用していて、有効な答えを見つけるのに苦労していた人のために、私はここにあります。
from pynput.keyboard import Key, Listener
def on_press(key):
print('{0} pressed'.format(
key))
def on_release(key):
print('{0} release'.format(
key))
if key == Key.esc:
# Stop listener
return False
# Collect events until released
with Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
上記の関数は、「esc」キーを放すと、押しているキーに加えてアクションを開始します。キーボードのドキュメントは、より多様な使用法についてはこちらです。
Markus von Broadyは、潜在的な問題を次のように強調しました:この回答では、このスクリプトをアクティブにするために現在のウィンドウにいる必要はありません。
from win32gui import GetWindowText, GetForegroundWindow
current_window = (GetWindowText(GetForegroundWindow()))
desired_window_name = "Stopwatch" #Whatever the name of your window should be
#Infinite loops are dangerous.
while True: #Don't rely on this line of code too much and make sure to adapt this to your project.
if current_window == desired_window_name:
with Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
OPがraw_inputについて言及しているように、これはCLIソリューションが必要であることを意味します。Linux:cursesは必要なものです(Windows PDCurses)。CursesはcliソフトウェアのグラフィカルAPIであり、キーイベントを検出するだけではありません。
このコードは、新しい行が押されるまでキーを検出します。
import curses
import os
def main(win):
win.nodelay(True)
key=""
win.clear()
win.addstr("Detected key:")
while 1:
try:
key = win.getkey()
win.clear()
win.addstr("Detected key:")
win.addstr(str(key))
if key == os.linesep:
break
except Exception as e:
# No input
pass
curses.wrapper(main)
termios
などを行うよりもはるかにクリーンなようです...
import os
終了してサンプルを終了できるようにするために追加する必要がありました。
win.nodelay(False)
代わりに実行するとTrue
、毎秒100万の例外が生成されません。
keyboard
モジュールでできることはもっとあります。
ここにいくつかの方法があります:
関数の使用read_key()
:
import keyboard
while True:
if keyboard.read_key() == "p":
print("You pressed p")
break
これは、キーpが押されたときにループを解除するつもりです。
関数の使用wait
:
import keyboard
keyboard.wait("p")
print("You pressed p")
pコードが押されるのを押して続行するのを待ちます。
関数の使用on_press_key
:
import keyboard
keyboard.on_press_key("p", lambda _:print("You pressed p"))
コールバック関数が必要です。_
キーボード関数がキーボードイベントをその関数に返すため、使用しました。
実行すると、キーが押されたときに関数が実行されます。次の行を実行すると、すべてのフックを停止できます。
keyboard.unhook_all()
この方法は、すでにuser8167727によって回答されていますが、私が彼らが作成したコードには同意しません。関数を使用しますis_pressed
が、別の方法で:
import keyboard
while True:
if keyboard.is_pressed("p"):
print("You pressed p")
break
p押すとループが切れます。
ノート:
keyboard
OS全体からキープレスを読み取ります。keyboard
Linuxでrootが必要keyboard.wait()
つ以上のキーを待ち、どちらかが押されても続行できるかどうかを知りたいと思った
wait()
はこの機能を提供しません。keyboard.read_key()
whileループにパックされたif条件で使用する必要があります。方法1を参照してください
suppress
キーワードの使用法、使用するkeyboard.read_key()
場合と使用しない場合
以下のためにWindowsのあなたは使用することができmsvcrt
、このように:
import msvcrt
while True:
if msvcrt.kbhit():
key = msvcrt.getch()
print(key) # just to show the result
このコードを使用して、押されたキーを見つけます
from pynput import keyboard
def on_press(key):
try:
print('alphanumeric key {0} pressed'.format(
key.char))
except AttributeError:
print('special key {0} pressed'.format(
key))
def on_release(key):
print('{0} released'.format(
key))
if key == keyboard.Key.esc:
# Stop listener
return False
# Collect events until released
with keyboard.Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
PyGameを使用してウィンドウを表示すると、主要なイベントを取得できます。
手紙の場合p
:
import pygame, sys
import pygame.locals
pygame.init()
BLACK = (0,0,0)
WIDTH = 1280
HEIGHT = 1024
windowSurface = pygame.display.set_mode((WIDTH, HEIGHT), 0, 32)
windowSurface.fill(BLACK)
while True:
for event in pygame.event.get():
if event.key == pygame.K_p: # replace the 'p' to whatever key you wanted to be pressed
pass #Do what you want to here
if event.type == pygame.locals.QUIT:
pygame.quit()
sys.exit()
そこで、この投稿に基づいてゲームの種類を作成しました(msvcrライブラリとPython 3.7を使用)。
以下は、押されたキーを検出するゲームの「主な機能」です。
# Requiered libraries - - - -
import msvcrt
# - - - - - - - - - - - - - -
def _secret_key(self):
# Get the key pressed by the user and check if he/she wins.
bk = chr(10) + "-"*25 + chr(10)
while True:
print(bk + "Press any key(s)" + bk)
#asks the user to type any key(s)
kp = str(msvcrt.getch()).replace("b'", "").replace("'", "")
# Store key's value.
if r'\xe0' in kp:
kp += str(msvcrt.getch()).replace("b'", "").replace("'", "")
# Refactor the variable in case of multi press.
if kp == r'\xe0\x8a':
# If user pressed the secret key, the game ends.
# \x8a is CTRL+F12, that's the secret key.
print(bk + "CONGRATULATIONS YOU PRESSED THE SECRET KEYS!\a" + bk)
print("Press any key to exit the game")
msvcrt.getch()
break
else:
print(" You pressed:'", kp + "', that's not the secret key(s)\n")
if self.select_continue() == "n":
if self.secondary_options():
self._main_menu()
break
ポーグラムの完全なソースコードが必要な場合は、それを表示するか、ここからダウンロードできます。
(注:秘密のキープレスはCtrl+ですF12)
この情報を参考にご覧になりたい方のために、参考にしていただければ幸いです。
PyGameを使用してイベントハンドルを追加することをお勧めします。