2016-04-26 2 views
1

キーボードプレスでラズベリーパイに接続されているいくつかのモーターを制御できるようにしたい。モーターを5秒間一方向に、次にもう一方の方向を5秒間回転させるコードがあります。私はpygameのキーリスナー機能を使用して、キーボードを押すことでモーターを制御したいと考えています。私は、キーボードプレスの面で次のようなテストを行っています。Python 3のPygameキーリスナー

import pygame 

pygame.init() 

pygame.key.set_repeat(100, 100) 

while 1: 
for event in pygame.event.get(): 
    if event.type == pygame.KEYDOWN: 
     if event.key == pygame.K_w: 
      print 'go forward' 
     if event.key == pygame.K_s: 
      print 'go backward' 
    if event.type == pygame.KEYUP: 
     print 'stop' 

このスクリプトを実行すると、エラーは発生しないため、実行されていることがわかります。しかし、「w」または「s」のどちらかのキーを押すと、ちょうど入力したかのように「w」または「s」のいずれかが表示されます。私が望むのは、キーを押して機能を実行できることだけです。それを行うための異なる/より良い方法があればそれはうまくいくでしょう。

+1

すべてが修正されました。たとえウィンドウが使われていなくても、パイゲームにウィンドウを作るように指示する必要があることは分かりませんでした。 – Jared

答えて

0

Pygame KEYDOWNイベントは、アクティブウィンドウのキープレスを探しています。

イベントを読み込む場所をPygameに指示するためのウィンドウを作成する必要があります。

もう1つの解決策は、端末からのキーボードイベントをフックすることです。つまり、Python Key Bindingなどのようなものを使用してウィンドウを初期化したり、フォーカスを合わせたりする必要はありません。またpyHookライブラリを使用してグローバルキーボードイベントフックを作成します。

P.S - 私はあなた自身が問題を解決したことを実感します。私はこれを完全性のために含めています。