我正在尝试写一个代码来设置一个实验,其中包括:创建一个窗口,显示数字0-9 1秒,为了让用户进入下一个屏幕,他们需要按下与所显示的数字相对应的键。我已经设法将数字显示在屏幕上,但不确定如何使用KeyList将数字显示在屏幕上,并且用户按下屏幕上的相同数字即可继续。
from psychopy import visual, core, event
win = visual.Window([1024, 768], fullscr = False, \
allowGUI=True, units="pix", color = (-1, -1, -1))
for number in ['0', '1', '2', '3', '4', '5', '6', '7', '8','9']:
tstim= visual.TextStim(win,text = number, pos=(0,0))
tstim.draw()
win.flip()
core.wait(1.0)
win.flip()
core.wait(1.0)
win.flip()
event.waitKeys(keyList=['return'])
win.close谢谢:)
发布于 2019-01-21 05:11:13
你应该避免使用core.wait(),因为你不能在这段时间内做任何事情(比如不断地检查按键,这(我认为)就是你想要的。此外,为了获得更好的性能,您应该只创建一次刺激,然后根据需要更新其属性(即从头开始创建文本刺激比仅更改现有刺激的内容需要更长的时间)。
未经测试,但尝试如下所示:
from psychopy import visual, core, event
win = visual.Window([1024, 768], fullscr = False,
allowGUI = True, units = 'pix', color = (-1, -1, -1))
# create just once:
tstim = visual.TextStim(win, text = 'blah', pos=(0,0))
correct_key_pressed = False
for number in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']:
tstim.text = number
# assuming a screen refresh rate of 60 Hz, draw
# the stimulus 60 times (= 1 second duration):
for frame in range(60):
tstim.draw()
win.flip()
# check for keypresses on every screen refresh:
keys = event.getKeys()
if number in keys:
correct_key_pressed = True
break # exit this drawing loop
if correct_key_pressed:
break # exit the number loop
core.quit()这不是很复杂:它忽略了反应时间问题(例如,如果正确的按键发生在生理上有效的时间间隔之前,我们可能应该忽略对当前数字的正确按键,而是将对前一个数字的响应视为该时间段内的正确数字)。
https://stackoverflow.com/questions/54276859
复制相似问题