Python 心理变态的钥匙问题

Python 心理变态的钥匙问题,python,psychopy,Python,Psychopy,我已经和这个问题争论了好几个小时,而我试图在网上找到解决方案的努力却一无所获。希望这里有人有一些见解 在实验过程中,参与者看到一系列刺激,然后是没有用户输入的面具。然而,在一些试验中,我们希望加入“捕获”试验,以确保参与者仍然参与 因此,理想情况下,流量如下所示: 刺激->蒙版->刺激->蒙版…->试镜->蒙版(注册键-“我看到了”)->刺激->蒙版 我遇到的问题是,当我调用event.getKeys('space')时,它总是返回一个空列表 下面是一段相关代码: if

我已经和这个问题争论了好几个小时,而我试图在网上找到解决方案的努力却一无所获。希望这里有人有一些见解

在实验过程中,参与者看到一系列刺激,然后是没有用户输入的面具。然而,在一些试验中,我们希望加入“捕获”试验,以确保参与者仍然参与

因此,理想情况下,流量如下所示:

刺激->蒙版->刺激->蒙版…->试镜->蒙版(注册键-“我看到了”)->刺激->蒙版

我遇到的问题是,当我调用event.getKeys('space')时,它总是返回一个空列表

下面是一段相关代码:

            if stimCount >= min(catchTrials)+mod[modCount] and stimCount <= max(catchTrials)+mod[modCount] and beenDisplayed == 0:
                print 1
                test = random.randint(0,1)
                if test == 1 or stimCount % 20 == 0:
                    print 2
                    actualStim.setSF(0)
                    actualStim.setOri(0)
                    doCatch(catchTimeout) # this displays the "catch" stim
                    doMask(MaskTimeout,maskNum) # this is the mask
                    print stimCount+1, 'catch', catchResponse # debug line
                    beenDisplayed = 1
                    modCount += 1
                    inCatch = 1
                    keys = event.getKeys(["space"]) # should return *something* that was pressed?
                    print 'keys = ',keys
                    if len(keys) > 0: # logic given a keypress
                        print 'pressed'
                        catchResponse[0] = 1
                    else:
                        print 'not pressed'
                        catchResponse[0] = 0

                else:
                    maskNum = str(1) 
                    doFixate(FixateTimeout)
                    actualStim.setSF(Circle1[stimCount][1])
                    actualStim.setOri(Circle1[stimCount][2])
                    #doMask(MaskTimeout,maskNum)
                    print stimCount+1, inCatch
                    if inCatch == 1:
                        print str(keyMap[response["firstKey"]])
                    doStimulus(None, StimTimeout, None)
                    doMask(MaskTimeout,maskNum)

  Output: 
    5 0
    1
    6 0
    1
    2
    7 catch [0, 1]
    keys =  []
    not pressed
    8 0
如果stimCount>=min(catchTrials)+mod[modCount]和stimCount 0:#给定按键的逻辑
打印“已按下”
catchResponse[0]=1
其他:
打印“未按下”
catchResponse[0]=0
其他:
maskNum=str(1)
doFixate(FixateTimeout)
实际即时设置值(第1圈[stimCount][1])
ActualTime.setOri(圆圈1[stimCount][2])
#doMask(MaskTimeout,maskNum)
打印计数+1,不匹配
如果inCatch==1:
打印str(keyMap[response[“firstKey”]])
剂量刺激(无,刺激超时,无)
doMask(MaskTimeout,maskNum)
输出:
5 0
1.
6 0
1.
2.
7捕获[0,1]
键=[]
不紧不慢
8 0
据我所知,event.getKeys()返回自上次调用getKeys或调用clearEvent以来按下的所有键的列表

在这种情况下,我不明白为什么钥匙总是空的。我尝试将getKeys事件移动到整个循环中,但没有效果

我非常感谢您的帮助,
Ben

这里实际上没有显示循环结构,因此很难知道代码是如何工作的。event.getKeys()设计用于及时检查给定实例中按下的内容,因此它最适合处于一个相当紧密的循环中(例如每次屏幕刷新时检查)。否则,很有可能在反应时间过去之前检查按键。我们无法从上面判断你什么时候检查,以及按键是否会滑过去。如果您可以去掉无关的细节以制作一个最小的可复制示例,这也会很有用。您还可以使用event.waitKeys()-也可以为waitKeys指定超时。