我正在尝试编写一个代码,使用户能够使用向上和向下箭头键调整行的长度。
我可以让用户通过按动它们来调整行,但这需要很长的时间,因为要使行长增加(如果按了向上键)或减少了(如果按了向下键),每次按1个像素。
我想知道是否有人知道如何在按住键的同时调整行的长度并在释放键后停止对该行的调整?
我一直在使用不同的ioHub功能,但无法弄清楚。
我试图以按键的持续时间为基础,但是直到释放按键后才报告持续时间,因此用户在按住按键的同时无法查看他们如何调整线条。
有没有人有什么建议?
最佳答案
该答案假设您正在使用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的新手:这对我有用,但可能不是“正确”的方式)。
关于python - 使用ioHub的PsychoPy Key Down Code,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25495252/