PsychoPy - 按下按键时连续移动 RatingScale 标记
PsychoPy - Move RatingScale marker continuously on key-down
我在 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 的底层代码来完成此操作,尽管我觉得这有点超出我的舒适范围。对替代方法的任何帮助将不胜感激。这只是代码的开始,所以一切顺利!
谢谢,
帕特里克
我认为这个查询可以解决您的问题: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
我在 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 的底层代码来完成此操作,尽管我觉得这有点超出我的舒适范围。对替代方法的任何帮助将不胜感激。这只是代码的开始,所以一切顺利!
谢谢, 帕特里克
我认为这个查询可以解决您的问题: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