私はPsychoPyを使用してEyeTrackerマシンの実験をコーディングしています。PsychoPyのユーザー入力に基づいて前進する試みを中止する
PsychoPyのGoogleグループで提案されているように、Builderビューを使用して実験の基本構造を作成し、スクリプトをコンパイルしてからコーダービューに変更を加えました。したがって、ユーザーの入力を処理する方法が生成されますPsychoPyによって。 Enterキーを押してユーザーが入力を書き留めてから次の質問に進む必要があるため、2つの主要な応答オブジェクトがあるため、最初のユーザーはユーザーの入力を収集し、2番目のユーザーはEnterキーを押すとトリガーします。たとえば:
# *B1_P2_key_01* updates
if t >= 0.0 and B1_P2_key_01.status == NOT_STARTED:
# keep track of start time/frame for later
B1_P2_key_01.tStart = t # underestimates by a little under one frame
B1_P2_key_01.frameNStart = frameN # exact frame index
B1_P2_key_01.status = STARTED
# keyboard checking is just starting
win.callOnFlip(B1_P2_key_01.clock.reset) # t=0 on next screen flip
if B1_P2_key_01.status == STARTED:
#theseKeys = event.getKeys(keyList=['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'])
theseKeys = event.getKeys(keyList=['num_1', 'num_2', 'num_3', 'num_4', 'num_5', 'num_6', 'num_7', 'num_8', 'num_9', 'num_0'])
# check for quit:
if "escape" in theseKeys:
endExpNow = True
if len(theseKeys) > 0 and b1p2_counter < 3: # at least one key was pressed
B1_P2_key_01.keys.extend(theseKeys) # storing all keys
B1_P2_key_01.rt.append(B1_P2_key_01.clock.getTime())
print "accepted key"
b1p2_counter += 1
# *B1_P2_key_02* updates
if t >= 0.0 and B1_P2_key_02.status == NOT_STARTED:
# keep track of start time/frame for later
B1_P2_key_02.tStart = t # underestimates by a little under one frame
B1_P2_key_02.frameNStart = frameN # exact frame index
B1_P2_key_02.status = STARTED
# keyboard checking is just starting
win.callOnFlip(B1_P2_key_02.clock.reset) # t=0 on next screen flip
event.clearEvents(eventType='keyboard')
if B1_P2_key_02.status == STARTED:
theseKeys = event.getKeys(keyList=['return'])
# check for quit:
if "escape" in theseKeys:
endExpNow = True
if len(theseKeys) > 0: # at least one key was pressed
B1_P2_key_02.keys = theseKeys[-1] # just the last key pressed
B1_P2_key_02.rt = B1_P2_key_02.clock.getTime()
# a response ends the routine
msg2='finish_b1p2_'+paths_list[imagecounter]
print msg2
#tracker.sendMessage(msg2)
continueRoutine = False
は、私はそれが彼/彼女のタイプのように画面上に表示されるように、ユーザの入力を必要とすることに注意してください、そうで示唆したように私は、別のTextStimオブジェクトの使用に基づいたソリューションを実装しましたあまりにグループ:
# *B1_P2_resp_01* updates
if t >= 0.0 and B1_P2_resp_01.status == NOT_STARTED:
# keep track of start time/frame for later
B1_P2_resp_01.tStart = t # underestimates by a little under one frame
B1_P2_resp_01.frameNStart = frameN # exact frame index
B1_P2_resp_01.setAutoDraw(True)
displaystring=" ".join(B1_P2_key_01.keys) #convert list of pressed keys to string
displaystring=displaystring.replace(' ','') #remove intermediate spaces
# Do some text cleanup...replacing key names with puntuation and effectively disabling keys like 'back','shift', etc.
displaystring=displaystring.replace('space',' ')
displaystring=displaystring.replace('comma',',')
displaystring=displaystring.replace('lshift','')
displaystring=displaystring.replace('rshift','')
displaystring=displaystring.replace('period','.')
displaystring=displaystring.replace('back','')
displaystring=displaystring.replace('num_1','1')
displaystring=displaystring.replace('num_2','2')
displaystring=displaystring.replace('num_3','3')
displaystring=displaystring.replace('num_4','4')
displaystring=displaystring.replace('num_5','5')
displaystring=displaystring.replace('num_6','6')
displaystring=displaystring.replace('num_7','7')
displaystring=displaystring.replace('num_8','8')
displaystring=displaystring.replace('num_9','9')
displaystring=displaystring.replace('num_0','0')
#displaystring=displaystring.replace('backspace','')
#set text of AnswerDisplay to modified string
B1_P2_resp_01.setText(displaystring)
#print displaystring
は今ここに私の問題は、彼/彼女が何を入力していない場合進出からユーザーを防ぐ方法である、または提供される値は、与えられた範囲(例の外にある場合:値ができるだけで0から100まで)。私はそこにいくつかの選択肢があることを知っていますが、PsychoPyのデフォルトの構造とは異なる構造を使用しています。そして、私はこの入力コントロールを現在提供されているものに実装する必要があります。
私はEnterイベントを処理しようとしましたが、テキストオブジェクトは入力されたEnterキーをまだ記録していますので、テキストが変更されます。また、最初のkey_responseオブジェクトから制御しようとしましたが、Enterキーの処理を担当するもう1つのキーが機能しなくなりました。
要するに、このフォーマットに固執しながら、ユーザーが次の試行に進むことができるかどうかを判断するために、2番目のkey_responseオブジェクト(Enterキーを処理するオブジェクト)の条件を設定する必要があります。入力のオンスクリーン表示。
この件に関するヘルプをいただければ幸いです。
をするだろう、その部分はSOのポストのためにあまりにも長い間、それを避けるために、この記事に含まれていないが、はい、それらの命令は、そこにあなたが正しく言ったように。コードの特定の部分に条件を設定してテストしてみましょう。すべてがうまくいくなら、私はあなたに戻ってきます。 –
もう一度@Jonas、このアプローチは100%正確ではありませんが、それは非常に近いです。 "while"ステートメントの表示条件を設定する問題は、displaystring要素がwhileをすぐに中断させることです(空の状態で初期化され、whileは中断条件として使用されます)。試しにすべてを表示しているので、それは完全にスキップされています。私はこれが正しい方向に私を指し示していると推測していますが、条件を設定するとループの内部でうまくいくはずです。 +1は私を正しい方向に向ける。私は完全な実用的な解決策を得たときに投稿します。ありがとうございました –