我正在尝试使用相同的键在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
。我用原始的习惯用法对其进行了测试,以确保其行为与我的版本完全相同。)
答案 0 :(得分:0)
经过更多测试后,发现在每个win.flip()
之后删除event.clearEvent()
可以解决此问题。我不太确定为什么额外的翻转(我认为在绘制新刺激之前必须清除屏幕)会导致这种现象。有人可以解释吗?