我是 Python 新手,正在编写一个简单的心理学实验。简而言之,我向参与者展示一系列随机图像,并让他们在检测到给定图像中的脸部时按一个键。
我的问题之一是,当参与者按下按键太快时,程序会崩溃 - 也就是说,我注意到即使参与者在没有图像的情况下按下按键,程序也会记录响应。每个图像只会在屏幕上显示 10 秒。参与者通常平均需要约 0.5 秒才能使用react。
是否有一个键可以让我对实验进行编程,以便 Psychopy 在图像显示在屏幕上后仅记录按键一次?我已将代码粘贴在下面。
非常感谢。
StimList=['Face1.png','Face2.png',]
StimList.extend(['Noise1.png','Noise2.png'])
# randomize lists:
numpy.random.shuffle(StimList)
outstr=""
for TrialNo in range(len(StimList)):
# load our image:
img=visual.ImageStim(
win=win,
image=StimList[TrialNo],
)
# draw the fixation cross and wait for trial start:
win.flip()
time.sleep(1) # wait 1 second on fixation cross
# start a trial: loop until a key has been pressed (or trial times out)
FaceDetected=0 # same as false
Responded=0 #revise
timer=core.Clock()
timer.reset()
while (not Responded) and (timer.getTime()<TimeOut): #remove not responded
img.draw()# outside loop
win.flip() #outside loop
keys=event.getKeys(keyList=['y','Y', 'n','N'], modifiers=False, timeStamped=timer)
if keys:
if (keys[0][0]=='y') | (keys[0][0]=='Y'):
FaceDetected=True
Responded=True
RT=keys[0][1]
elif (keys[0][0]=='n') | (keys[0][0]=='N'):
FaceDetected=False
Responded=True
RT=keys[0][1]
outstr=outstr+str(TrialNo)+", "+ StimList[TrialNo] +", "+str(FaceDetected)+", "+str(RT)+"\n"
print(outstr)
# first open the file:
outfile=open('tmpdata.csv', 'w')
outfile.write(outstr)
outfile.close()
win.close()
最佳答案
上面的代码存在很多 Python 问题,我怀疑这是由于来自另一种编程语言的负转移造成的。例如,在 Python 中,您应该在逻辑比较中使用 or
,而不是 |
,后者在 Python 中是按位“OR”的运算符,是一种不同的野兽。另外,您可能想尝试使用更 Python 的 for TrialNo,stimulus in enumerate(StimList):
来代替 for TrialNo in range(len(StimList)):
,当您可以使用 PsychoPy 的计时类或屏幕刷新计数进行更精确的控制时,请避免使用 time.sleep() 等标准 Python 函数。
但在与您的主要问题相关的 PsychoPy API 特定术语中,您需要在首次绘制刺激之前(例如,当您重置试验计时器时)调用 event.clearEvents()
。这将清除键盘缓冲区中任何先前按下的键。
在更多特定于 PsychoPy 的提示中,避免重复创建对象。例如计时器只需要在脚本开始时创建一次。然后您只需每次试用重置一次即可。目前,重置实际上是多余的,因为计时器在创建时已归零。计时器很简单,多次创建并不会真正影响性能,但刺激更复杂,您绝对应该避免一遍又一遍地创建它们。例如在这里只需创建一次图像刺激即可。然后在每次试验中,只需更新其图像属性即可。这本身需要时间来完成,因为需要从磁盘读取文件。因此,理想情况下,您应该在注视刺激期间或目前的试验之间这样做。
您的代码确实显示了一些问题,而不仅仅是您在问题中提出的问题。因此,您可能会在 https://discourse.psychopy.org 找到该论坛。比 SO 的单一问答格式更有用。
关于python - 如何在简单的 Psychopy 实验中仅记录有效的按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52655924/