【问题标题】:PsychoPy Builder: how to update screen each keypress?PsychoPy Builder:如何每次按键更新屏幕?
【发布时间】:2014-05-01 01:37:20
【问题描述】:

我想在受试者每次按下一个键时显示一个不同的文本对象,具体取决于刚刚按下的键,我只希望一个特定的键进入下一个试验。

例如,屏幕应该显示“5”的文本,然后如果主题按下向下键,它会变为“4”,如果他们按下向上键,它会变为“6”等,但如果他们按下回车键我们转到下一张幻灯片。

如何解决这个问题?

到目前为止我所尝试的

我一直在使用构建器视图来创建一个通用框架,然后一直在单独处理代码本身。我尝试插入这样的循环:

inloop=True
while inloop:
    print "in the loop"
    if event.getKeys('return'):
        inloop = False
        continueRoutine=False
    elif event.getKeys('left'):
        print "left key pressed"
    elif event.getKeys('right'):
        print "right key pressed"
    elif event.getKeys('escape'):
         core.quit()

如果我把它放在我想要这种行为的例程的 ContinueRoutine 循环中,我将无法“在循环中”或任何其他打印语句进行打印,因此它似乎没有进入循环。我也试过把它放在其他几个地方,也遇到了类似的困难。你会在哪里插入这样的循环,这似乎是解决这个问题的好方法?

【问题讨论】:

    标签: python keyboard psychopy


    【解决方案1】:

    作为一般建议,从长远来看,将其添加到构建器代码组件中会更容易。从 builder 到 coder 是一条路——代码中的编辑不能被带回 builder。或者您可以编写完整的代码,在这种情况下建议从头开始编写。

    您的实施

    关于您当前代码无法运行的原因的一些问题:

    1. 默认情况下,每个 event.getKeys() 都会在调用后删除响应。因此,像您一样在每个帧中多次调用它会使后续调用为空。
    2. event.getKeys() 将 LIST 作为参数,您在其中给它一个字符串。如果你想听一个键,给它['return']而不是'return'。

    作为改善时间安排(和概念清晰度)的建议:如果在等待按键时视觉是静态的,我会使用 waitKeys,这样只会在按键时发生某些事情。这也将提高相对于 getKeys() 的准确性,后者在使用 win.flip() 放入循环时锁定到帧。

    解决方案

    因此您可以在代码组件中执行以下操作,该组件应位于文本下方:

    while True:  # Yes, continue listening forever...
       resp_key = event.waitKeys(keyList=['left','right','up','down','return'])[0]  # pick first and only response.
    
       # Set different texts dependent on received response
       if resp_key == 'left':
          yourTextStimulus.text = '5'
       elif resp_key == 'right':
          yourTextStimulus.text = '7'
       elif resp_key == 'up':
          yourTextStimulus.text = '2'
       
       # .. or break out of the loop if return was pressed
       elif resp_key == 'return':
          break  # oh, do NOT continue forever... we're finished on return :-)
       # Actually show text if loop was not ended
       yourTextStimulus.draw()
       win.flip()
    

    将“yourTextStimulus”重命名为您的文本名称。当然,如果需要,您可以将其调整为更多/不同的键,并使实际的字符串(当前为 '5'、'7'、'2')依赖于试验。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多