2016-12-05 10 views
0

以下のコードでは、pic1を3秒間表示してから、1秒間固定クロスを表示してから、ユーザーが押すまでpic2を表示していますかぎ。私の知る限りでは、これは私がキー・リストを作成してキーなどをチェックする場所であるため、3回目の 'for'ループのキー・プッシュを収集するだけですべきです。しかし、pic1またはfixationのクロス中にキーを押すと、すぐにpic2が来るとすぐに、コードと共に移動します。 3回目のforループの前にキーを登録しているようですが、3回目のforループと同様に効果があります。私はpic1と固定の表示中にキーを確認していないので、これがどうなっているのか分かりません。誰かがここで私を啓発できますか?おそらく、私はgetKeysについて根本的な何かを誤解しています。Python/Psychopy:getKeysが早すぎるキーを収集しています

- 何も押さなかった場合、予想される動作が発生します.itはpic2を表示し、キーを待機します。キーが押された場合、または60秒が経過した場合(60秒間表示するように設定した場合、ユーザーは最初の5秒間に応答することが予想されるため、60は安全です)、コードで移動します。そのメモリバッファ内のすべてのキーが存在

def block1(): 

    running = 1 

    while running ==1: 

     for frames in range(image_frames): #3 seconds 
      pic1[0].draw() 
      window.flip() 

     for frame in range(fixation):  #1 second 
      fix.draw() 
      window.flip() 

     for frames in range(stim_Frame): #only moves on with keypress (or 60 secs) 
      pic2[0].draw() 
      start = window.flip() 
      if frames == 0: 
       stim_time = start 
       print "stim time: " 
       print stim_time 

      allKeys = event.getKeys(keyList = ('f','h','escape')) 
      for thisKey in allKeys: 
       if thisKey == 'escape': 
        print "you quit" 
        window.close() 
        core.quit() 
       if thisKey == 'f': 
        keyTime=core.getTime() 
        thisResp = 1  
        print "keytime is: " 
        print keyTime 

       elif thisKey == 'h': 
        keyTime=core.getTime() 
        thisResp = 0 
        print "keytime is: " 
        print keyTime 

      if thisResp == 1 or thisResp == 0: 
       break 

     running = 2 

    window.flip() 

乾杯、 スティーブ

+2

私の理解では、 'event.getKeys()'はメモリバッファにあるすべてのキーを返します。 ['event.clearEvents()'](http://www.psychopy.org/api/event.html#psychopy.event.clearEvents) – Jakub

+0

で3番目のループの前にそのバッファをクリアしてみてください。ありがとうございました。 getKeysが開始される前にキーが押されていても、バッファ内のすべてのキーを返すかどうかはわかりませんでした。 – Steve

+0

@Jakubは正しいです。コメントではなく答えとしてそれを追加し、それを受け入れることは素晴らしいでしょう。そうでなければ、あなた自身の質問に答えることができます、スティーブ。 –

答えて

1

event.getKeys()戻ります。 3番目のループの前にそのバッファをクリアします。

def block1(): 

    running = 1 

    while running ==1: 

     for frames in range(image_frames): #3 seconds 
      pic1[0].draw() 
      window.flip() 

     for frame in range(fixation):  #1 second 
      fix.draw() 
      window.flip() 

     event.clearEvents() # Clear the previously pressed keys. 

     for frames in range(stim_Frame): #only moves on with keypress (or 60 secs) 
      pic2[0].draw() 
      start = window.flip() 
      if frames == 0: 
       stim_time = start 
       print "stim time: " 
       print stim_time 

      allKeys = event.getKeys(keyList = ('f','h','escape')) 
      for thisKey in allKeys: 
       if thisKey == 'escape': 
        print "you quit" 
        window.close() 
        core.quit() 
       if thisKey == 'f': 
        keyTime=core.getTime() 
        thisResp = 1  
        print "keytime is: " 
        print keyTime 

       elif thisKey == 'h': 
        keyTime=core.getTime() 
        thisResp = 0 
        print "keytime is: " 
        print keyTime 

      if thisResp == 1 or thisResp == 0: 
       break 

     running = 2 

    window.flip() 
関連する問題