我试着用同一个键在精神病患者的多次连续刺激后翻转,但它也会不断地翻转连续的屏幕
我想到的是,对手册中的一个示例进行了以下细微修改:
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
一瞬间,然后立即终止。另一方面,如果我对第二个刺激使用不同的键(在循环条件中用'return'
替换'space'
),那就可以了
我的第一个怀疑是event.clearEvents()
以某种方式未能清除事件缓冲区,因此来自第一个刺激的空间事件保持保存,并翻转了第二个刺激。但是在这种情况下,根本不应该显示stim3
,因为循环条件将立即失败。另外,如果我在上面指定的位置打印event.getKeys()
,它看起来是空的。此外,如果我在两个空间触发的刺激之间使用不同的键(从stim2
部分删除注释),突然所有键都正常工作了
有人知道我做错了什么吗
(顺便说一句,如果您想知道的话:我修改了手动示例,将程序等待来自while True
循环的输入的循环更改为while len(event.getKeys(['space'])) <= 0
,这样就不需要对break
使用完全相同的条件。我用原来的习惯用法测试了它,只是为了确定它的行为与我的版本完全相同。)
经过更多的测试发现,删除每个
event.clearEvent()
后面的win.flip()
可以解决这个问题。我不太清楚为什么额外的翻转(我认为在绘制新刺激之前清除屏幕是必要的)会导致这样的行为。有人能解释一下吗相关问题 更多 >
编程相关推荐