【问题标题】:PsychoPy - Move RatingScale marker continuously on key-downPsychoPy - 在按键上连续移动 RatingScale 标记
【发布时间】:2016-12-04 04:44:28
【问题描述】:

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

为了在 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 的底层代码来实现这一点,尽管我觉得这有点超出我的舒适区。任何对替代方法的帮助将不胜感激。这只是代码的开始,一切顺利!

谢谢, 帕特里克

【问题讨论】:

  • 编辑:由于 RatingScale 使用 pyglet 来捕捉键盘事件,我不确定这个策略是否有效,但它就这样(只是一个非常快速且未经测试的建议让你开始):你可以使用iohub 模块捕获关键版本:stackoverflow.com/questions/32729026/key-releases-psychopy?rq=1 并在 Coder --> 演示 --> iohub --> 键盘中查看 iohub 演示。然后你可以在你的while循环中有一个core.wait(0.2)在监听键盘释放之间,如果它每秒移动5个点。

标签: python keyboard-events psychopy


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多