2017-11-08 11 views
0

どれくらい長く押しても、キー "s"が押されたときに変数 "shot_pressed"を1だけ増やしたいと思います。しかし、結果は変数が増加し続けるということです。私が長く押すほど、変数の値は大きくなります。以下は私のコードの一部です。キーを押したときにちょうど1つ増えます

import keyboard 

shot_pressed = 0 

if keyboard.is_pressed('s'): 
    shot_pressed += 1 

答えて

1

ファーストをお読み使用することができ、私は

import keyboard 

shot_pressed = 0 

while True: 
    if keyboard.is_pressed('s'): 
     shot_pressed += 1 
     print("shot_pressed %d times"%shot_pressed) 
あなたのコードは、あなたが上記に書いたようにされていませんと仮定したが同様

「はい」の場合は、ここで問題の核となります。is_pressedは、キーが押されている間は常にTrueになります。したがってifの条件は真となり、whileは何度も繰り返します。

これに対処する方法は2つあります。

1)was_pressed変数inroduceので、同じメソッドを使用しますが、これは最初のis_pressed瞬間かどうかをチェック:より良いライブラリを使用

import keyboard 

shot_pressed = 0 
was_pressed = False 

while True: 
    if keyboard.is_pressed('s'): 
     if not was_pressed: 
      shot_pressed += 1 
      print("shot_pressed %d times"%shot_pressed) 
      was_pressed = True 
    else: 
     was_pressed = False 

2)。フックを設定することができますので、キー押下機能が呼び出されます(1回のプレスで1回のみ)。だから、コードは次のようになります。

import keyboard 

shot_pressed = 0 

def on_press_reaction(event): 
    global shot_pressed 
    if event.name == 's': 
     shot_pressed += 1 
     print("shot_pressed %d times"%shot_pressed) 

keyboard.on_press(on_press_reaction) 

while True: 
    pass 
0

私は、そのモジュールを使用していないが、あなたはおそらくあなたがJavaScriptで望む同じことをしたいです。キーボード.KEY_DOWN is_pressedの代わりに。

https://github.com/boppreh/keyboard#keyboard.KEY_DOWN

おそらく、非同期としても、物事を処理する必要があります。

+0

ちょうどメモとして、キーが保持されている場合に最もキーボードドライバ(似WindowsおよびLinuxではなく、MacOSのわから)は、複数の 'press'と' release'イベントを送信するので、 –

0

私にはわかりませんキーボードモジュールですが、あなたのコードに問題があるのは、プログラムが一度入力することです。プログラムはキーボードから次の入力を待つ必要があります。 whileループを使用して、ユーザーからの入力を取得してみてください。

0
import keyboard 
import time 
shot_pressed = 0 
try: 
    while True: 
     if keyboard.is_pressed("S"): 
      shot_pressed += 1 
      time.sleep(0.1) 
      print(sh) 
except Exception as er: 
    pass 

またはすべてがあなたがhttps://pypi.python.org/pypi/keyboard

セカンドを使用するように見えるのキー

try: 
    shot_pressed = 0 
    while True: 
     key.read_key() 
     if key.is_pressed("s"): 
      sh += 1 
      print(shot_pressed) 
except Exception as er: 
    pass 
+0

なぜこれが答えか、睡眠が必要な理由などを説明してください。 また、あなたは印刷物を忘れました –

+0

Do()あなたはループ遅延のために眠っている動詞が素早く動いているときに文字 "s"を押すと、変数の値が1つの圧力で1000に達するように急速に増加するので、 –

+0

を使うことができます。 https://pypi.python.org/pypi/pynput –

関連する問題