Events PsychoPy-event.getKeys()未正确录制按键列表

Events PsychoPy-event.getKeys()未正确录制按键列表,events,psychopy,Events,Psychopy,我试图让用户能够通过按向上或向下键来调整psychopy中显示的行的长度。我使用的是event.getKeys(),但是,它并没有记录按下的键。我不知道为什么,但它总是显示一个空的键列表。这是我的代码: class line(object): def makeLine(self,length): line = visual.Line(win=win,ori=-45,lineRGB=[-1,-1,-1],lineWidth=3.0, fillRGB=None,

我试图让用户能够通过按向上或向下键来调整psychopy中显示的行的长度。我使用的是event.getKeys(),但是,它并没有记录按下的键。我不知道为什么,但它总是显示一个空的键列表。这是我的代码:

class line(object):
    def makeLine(self,length):
        line = visual.Line(win=win,ori=-45,lineRGB=[-1,-1,-1],lineWidth=3.0, fillRGB=None,
                 pos= [0,0],interpolate=True,opacity=1.0,units='cm',size=length)
        #describes the line 
        return line.draw()

line2length=2#original length of the line 
line2=line()#makes line2 an instance of line class 
line2.makeLine(line2length)#calls the makeLine function of the line class 
win.flip()#updates the window
keys = event.getKeys()
expInfo['KeyPress']=keys 
event.waitKeys(['return'])
print keys        
for key in keys: 
    if 'up' in key:
        line2length+=.5
        line2.makeLine(line2length)
        win.flip()
    if 'down' in keys:
        line2length-=.5
        line2.makeLine(line2length)
        win.flip()

event.clearEvents()
thisExp.nextEntry()

psychopy.event.getKeys()
返回自事件模块实例化或自上次
getKeys()
调用或自
event.clearEvents()
以来的密钥列表。如果在此帧中未注册键盘事件,则返回
None

在您的例子中,受试者在到达
事件.getKeys()
行之前可能有大约0.1秒的时间按下,因为这两行之间没有时间间隔,比如core.wait或multiple
win.flip()

我怀疑您确实想使用
event.waitKeys()
,它等待第一个键盘事件并返回该事件。这保证了返回的列表中始终只有一个键

对代码的其他一些注释:

  • 查看编码器-->演示-->刺激中的演示,了解如何呈现形状图(直线、矩形、圆形等都是形状图)。您将看到实例化和绘图应该以不同的方式进行,而且要简单得多。特别是,在每次试验中,您都会多次实例化一个完整的刺激,而实际上您应该只绘制它(更快更干净)
  • 在查找特定值时,无需循环使用
    。只要按“向上”键就行了
  • 下面是一个经过修订的代码,它可能更接近您想要的:

    #创造刺激。沉重的东西
    line=visual.line(win=win,ori=-45,lineRGB=[-1,-1],lineWidth=3.0,fillRGB=None,
    位置=[0,0],插值=真,不透明度=1.0,单位='cm',大小=长度)
    #改变属性,轻的东西
    line.size=2#设置长度
    #当前刺激
    划线
    win.flip()
    #大约1秒后注册响应(如果需要精确计时,请逐帧计时),并有一个额外的“返回”
    核心。等待(1)
    keys=event.getKeys(['up','down'])#您可能想限制哪些键是有效的?否则,您必须稍后对无效密钥作出反应-这也是可以的。
    event.waitKeys(['return']))
    #对响应作出反应(这里没有win flip,我假设您只需要在下一次试用时进行此更改,上面的win.flip()将在下一次试用时执行
    如果键!=无:
    如果键中的“向上”:
    直线长度+=0.5
    如果按键“向下”:
    直线长度-=0.5
    其他:
    pass#您可以在此处对缺少的响应明确执行某些操作。
    #商标变更审判
    thisExp.nextEntry()