PsychoPy - 在按键时连续移动RatingScale标记

时间:2016-03-22 20:48:25

标签: python keyboard-events psychopy

我在Matlab(psychtoolbox)中有一个脚本,其中我编写了一个视觉模拟量表,锚定在0和100,参与者通过按住左右箭头键来移动标记。在实验方案转移到下一个刺激之前,参与者有五秒钟将标记移动到所需位置。

在使用PsychoPy中的类似代码时,我创建了以下测试代码:

from psychopy import visual, core
win = visual.Window([800,800])

# rating scale
scale = visual.RatingScale(win, low=0, high=100, size=2, tickMarks=['0','100'],
markerStart='50', marker='circle', textSize=.5, showValue=False, 
showAccept=False, noMouse=True, maxTime = 5)

while scale.noResponse:
    scale.draw()
    win.flip()

win.close()

此代码实际上非常适合入门,但我对键盘输入的工作方式有疑问。每次用户按下并释放按键时,标记仅移动1点(0到100之间)。期望的结果是当按下左或右键时标记连续移动。我的想法是,我可以通过编辑PsychoPy的底层代码来实现这一目标,尽管我觉得这有点超出了我的舒适范围。任何帮助替代方法将不胜感激。这只是代码的开始,所以一切顺利!

谢谢你, 帕特里克

1 个答案:

答案 0 :(得分:1)

我认为此查询可以解决您的问题:PsychoPy Key Down Code using ioHub

rating.markerPlacedAt是您更新每一帧所需的内容。这是我的(相当原始)改编每个框架部分的剥离版本:

for event_io in keyboard.getEvents():
    if event_io.type == EventConstants.KEYBOARD_PRESS:
        if event_io.key == u'right':
            increment = 0.01 # move one step to the right
        elif event_io.key == u'left':
            increment = -0.01 # move one step to the left
    if event_io.type == EventConstants.KEYBOARD_RELEASE:
        increment = 0 # stop changing position

if 0 < rating.markerPlacedAt < 1:
    rating.markerPlacedAt += increment