2016-03-22 10 views
0

Matlab(psychtoolbox)には、視覚的アナログスケールをコード化したコードがあり、0と100で固定されています。右矢印キー。参加者は、実験プロトコールが次の刺激に移る前にマーカーを所望の位置に移動するのに5秒間かかる。このコードは、実際に始めるためにかなりうまく動作しますが、私は、キーボード入力の動作方法に問題があるPsychoPy - キーダウン時に連続してRatingScaleマーカーを移動

from psychopy import visual, core 
win = visual.Window([800,800]) 

# rating scale 
scale = visual.RatingScale(win, low=0, high=100, size=2, tickMarks=['0','100'], 
markerStart='50', marker='circle', textSize=.5, showValue=False, 
showAccept=False, noMouse=True, maxTime = 5) 

while scale.noResponse: 
    scale.draw() 
    win.flip() 

win.close() 

PsychoPyで似た何かをコーディングする作業では、私は次のテストコードを作成しました。ユーザーがキーを押して離すたびに、マーカは1ポイント(0〜100の間)だけ移動します。所望の結果は、左または右のキーが押されるとマーカーを連続的に動かすことである。 PsychoPyの基本コードを編集することでこれを達成できると私は思っていますが、これは私の快適ゾーンからちょっと外れていると感じています。代替方法の助けがあれば幸いです。これはコードのほんの始まりにすぎません。

は、 パトリック

+2

EDIT:RatingScaleは、キーボードイベントをキャッチするためにpygletを使用しているため、この戦略がうまくいくかどうかはわからないんだけど、ここでは(だけを行きますあなたには非常に迅速かつ未確認の提案があります):iohubモジュールを使用してキーリリースをキャッチすることができます:http://stackoverflow.com/questions/32729026/key-releases-psychopy?rq=1そしてCoderのiohubデモを参照してください - > demos - > iohub - > keyboardを選択します。その後、1秒ごとに5ポイントを動かす場合、whileループの中でキーボードリリースを聞くことの間に '' core.wait(0.2) ''を置くことができます。 –

答えて

1

をありがとう、私はこのクエリはあなたの問題を解決思う:PsychoPy Key Down Code using ioHub

rating.markerPlacedAtあなたはすべてのフレームを更新するために必要なものです。ここでは、各フレーム部分の私(むしろ生)適応の剥奪のバージョンがあります:

for event_io in keyboard.getEvents(): 
    if event_io.type == EventConstants.KEYBOARD_PRESS: 
     if event_io.key == u'right': 
      increment = 0.01 # move one step to the right 
     elif event_io.key == u'left': 
      increment = -0.01 # move one step to the left 
    if event_io.type == EventConstants.KEYBOARD_RELEASE: 
     increment = 0 # stop changing position 

if 0 < rating.markerPlacedAt < 1: 
    rating.markerPlacedAt += increment 
関連する問題