每当按下一个键时移动到另一个刺激

Moving on to another stimulus whenever a key is pressed

我正在建立一个关于心理的实验,其中刺激物在屏幕上显示一段设定的时间(比如 0.5 秒),之后会出现一个空白屏幕并注视。我正在使用 event.waitKeys() 来获取键盘输入。

我写了下面的代码

for i in range (1, 21):
    answer = cf.Stimulus() #This is a function for generating the stimulus
    img = visual.ImageStim(
        win=win,
        image="temp.jpg",
        units="pix"
    )

    img.draw()             #This is the first screen
    fixation.draw()
    win.flip()
    core.wait(0.5)

    fixation.draw()        #This is the second screen
    win.flip()
    keysarray = event.waitKeys()
    os.remove('temp.jpg')

我 运行 遇到的问题是,如果在第一个屏幕的 0.5 等待时间结束之前接收到键盘输入,events.waitKeys() 不会注册此键输入并仍然在第二个屏幕上等待键盘输入。仅当收到第二个屏幕的键输入时,程序才会向前移动。

相反,我希望程序在屏幕 1 开始到屏幕 2 结束之间出现键盘输入时转到下一个刺激。也就是说,如果屏幕 1 本身接收到键盘输入(在 0.5 秒结束之前),我希望输入被注册并且程序继续下一个刺激(通过在非常短的时间内移动到屏幕 2,或者一起跳过屏幕 2)。我似乎无法弄清楚如何实现这一目标。

这里的简短回答是 event.waitKeys() 默认清除事件队列,以便只检测新的按键。您可以通过覆盖它来获得您想要的行为:

keysarray = event.waitKeys(clearEvents=False)

但我认为在调用该函数之前按下的键不会记录有用的反应时间(尽管键盘处理在 3.1 版中发生了很大变化)。

话虽如此,这段代码还有很多其他问题可以改进以适应更优化的 PsychoPy 风格。我建议将其发布在 https://discourse.psychopy.org 的用户论坛上。该论坛比 SO 的单一 question/answer 格式更适合 back-and-forth 讨论。