1

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

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

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

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

我尝试将它基于按键的持续时间,但直到按键被释放后才会报告持续时间,因此用户无法查看他们在按住按键时如何调整线路。

有没有人有什么建议?

4

1 回答 1

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 的新手:这对我有用,但可能不是“正确”的方法)。

于 2014-08-26T04:49:25.873 回答