PsychoPy使用KeyList设置实验

时间:2019-01-20 13:20:36

标签: psychopy

我正在尝试编写代码来建立涉及以下内容的实验:创建一个窗口,在1秒钟内显示数字0-9,以便用户进入下一个屏幕,他们需要按以下键响应显示的数字。我设法在屏幕上获取了数字,但是不确定如何使用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

谢谢:)

1 个答案:

答案 0 :(得分:2)

您应避免使用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()

这不是很复杂:它忽略了反应时间问题(例如,如果在生理上有效的间隔过去之前发生正确的按键操作,我们应该忽略当前按键的正确按键,而是考虑对先前编号的响应在此期间是正确的。