如何在PsychoPy中使用同一键多次翻转?

时间:2019-05-14 08:07:08

标签: python psychopy

我正在尝试使用相同的键在PsychoPy中多次连续刺激后进行翻转,但随后它也一直在翻转连续屏幕。

我想到的是对手册中示例之一的以下稍作修改:

from psychopy import visual, core, event

win = visual.Window(monitor="testMonitor", units="deg")

stim1 = visual.TextStim(win, text="Stim 1", pos=(0,0))
stim2 = visual.TextStim(win, text="Stim 2", pos=(0,0))
stim3 = visual.TextStim(win, text="Stim 3", pos=(0,0))

while len(event.getKeys(['space'])) <= 0:
    stim1.draw()
    win.flip()

event.clearEvents()
print(event.getKeys()) # test if key buffer is really empty
win.flip()

# while len(event.getKeys(['return'])) <= 0:
#     stim2.draw()
#     win.flip()

# event.clearEvents()
# win.flip()

while len(event.getKeys(['space'])) <= 0:
    stim3.draw()
    win.flip()

event.clearEvents()
win.flip()

win.close()
core.quit()

但是,如果我在第一个屏幕上按下空格键,则不仅会翻转此屏幕。相反,它将闪烁stim3一秒钟,然后立即终止。另一方面,如果我对第二个刺激使用不同的键(在循环条件下将'space'替换为'return'),则效果很好。

我的第一个怀疑是event.clearEvents()未能以某种方式清除事件缓冲区,因此第一个刺激的空间事件仍然保存,并且翻转了第二个刺激。但是,在那种情况下,stim3根本不会显示,因为循环条件会立即失败。另外,如果我在上面指示的位置打印出event.getKeys(),它似乎是空的。此外,如果我在两个触发的刺激之间使用不同的键(从stim2部分删除注释),突然所有键都可以正常工作。

有人知道我在做什么错吗?

(顺便说一句,如果您想知道:我修改了手动示例,方法是将程序等待从while True循环输入到while len(event.getKeys(['space'])) <= 0的循环更改为循环,从而无需使用完全相同的条件到break。我用原始的习惯用法对其进行了测试,以确保其行为与我的版本完全相同。)

1 个答案:

答案 0 :(得分:0)

经过更多测试后,发现在每个win.flip()之后删除event.clearEvent()可以解决此问题。我不太确定为什么额外的翻转(我认为在绘制新刺激之前必须清除屏幕)会导致这种现象。有人可以解释吗?