0

我正在设置一个关于精神病的实验,其中刺激物在屏幕上显示一段设定的时间(比如 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 结束之前s),我希望输入被注册并且程序继续到下一个刺激(通过在很短的时间内移动到屏幕 2,或者一起跳过屏幕 2)。我似乎无法弄清楚这是如何实现的。

4

1 回答 1

0

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

keysarray = event.waitKeys(clearEvents=False)

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

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

于 2019-05-12T07:42:47.787 回答