Я пытаюсь использовать одну и ту же клавишу для перелистывания после нескольких последовательных стимулов в 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
. Я протестировал его с исходной идиомой только что чтобы быть уверенным, и поведение точно такое же, как и в моей версии.)