使用ioHub的PsychoPy Key Down Code

时间:2014-08-25 22:22:43

标签: python psychopy

我正在尝试编写一个代码,用户可以使用向上和向下箭头键调整行的长度。

我可以让用户通过按下它们来调整线,但是这需要很长时间,因为我使用它以便长度增加(如果按下向上键)或减少(如果向下键是每次按下一个键时按1个像素。

我想知道是否有人知道如何在按下按键时调整线的长度并在按键释放后停止调整该线?

我一直在玩不同的ioHub功能,但一直无法弄明白。

我尝试将其基于按键的持续时间,但是在释放按键之后才会报告持续时间,因此用户无法查看他们在按住按钮时如何调整行钥匙。

有人有任何建议吗?

1 个答案:

答案 0 :(得分:1)

这个答案假设您正在使用PsychoPy的Builder界面。但您也可以在Coder界面中的相应位置放置相同的代码片段。

我假设您有一个Line组件,并且其大小以标准化单位指定。现在插入一个Code组件(在创建它之后,右键单击它并将其移到Line组件上方,以便立即应用对Line对象的更改而不是下一次刷新屏幕)。

在代码组件的“开始实验”选项卡中,将此代码初始化为ioHub,并为将应用于该行的缩放系数创建初始值(默认为零):

from psychopy.iohub import launchHubServer, EventConstants

io=launchHubServer(experiment_code='key_evts', psychopy_monitor_name='default')
keyboard = io.devices.keyboard

increment = [0, 0] # initial value of scaling factor

然后在“每个框架”选项卡中,我们将检查按键。因此,如果您的屏幕以60 Hz运行,那就是更新线路尺寸的速率。

# check the keyboard
for event in keyboard.getEvents():
    if event.type == EventConstants.KEYBOARD_PRESS:
    # a key has been pressed. This is reported only once, so set the value 
    # of the scaling factor to be used until the key is released:
        if event.key == u'UP':
            increment = [0.01, 0] # make it 1% of screen half-width longer
        elif event.key == u'DOWN':
            increment = [-0.01, 0] # make 1% shorter
    if event.type == EventConstants.KEYBOARD_RELEASE:
    # the key is no longer being pressed, so stop changing the size:
        increment = [0, 0]

# regardless of what key is/isn't pressed, apply the current
# scaling factor on every screen refresh
line.size += increment

希望对你有用。 (我是使用ioHub的新手:这对我有用,但可能不是“正确”的方法)。