PsychoPy использует KeyList для настройки эксперимента - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь написать код для настройки эксперимента, который включает в себя: создание окна, которое представляет числа 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

спасибо:)

1 Ответ

0 голосов
/ 21 января 2019

Вам следует избегать 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()

Это не очень сложно: оно игнорирует проблему времени реакции (например, нам следует игнорировать правильные нажатия клавиш на текущем номере, если они происходят до истечения физиологически обоснованного интервала, и вместо этого учитывать ответына предыдущий номер, правильный в течение этого периода).

...