我正在使用Psychopy构建器创建一个实验。 向参与者呈现包含数字的图像,例如10和20。 他们输入他们认为是数字的平均值,在这种情况下是15,然后按空格键继续下一个图像。
我试图拥有它,所以屏幕上有一个显示/框显示他们的条目,就像数十万和数百万的大数字一样,我认为他们可能会忘记他们所按的内容。 改变他们的参赛作品的能力也很优秀,但我最感兴趣的是他们能够在屏幕上看到它。
在构建器中,我找不到这样做的方法,并且评级量表不适合大量的数字。
我在代码中发现这些解决方案可以做一些听起来像这样的事情: http://www.psychopy.org/wiki/home.php/Snippets/LiveUpdatingText
但是当我尝试使用代码插入功能添加它们,或者只是将它们添加到已编译的脚本时,当我尝试运行实验时,屏幕会锁定。我是python的新手,我不知道从哪里开始修复它。我正在尝试做什么? 我很高兴从编译的构建器实验中提供一些示例代码。 提前谢谢!
答案 0 :(得分:1)
这些代码段是为Coder设计的,您可以在其中控制所发生的一切以及何时发生。同样的事情可以在Builder中完成,但您必须修改代码以适应Builder的事件循环周期。例如,Builder在实验开始时,每次试验中,每次屏幕刷新时都会执行某些操作。所以你不能只是在没有修改的情况下插入这种代码,因为,例如,它试图无限期地等待一个按键。与此同时,Builder正在检查键盘每次屏幕刷新(通常为60 Hz),因此如果您尝试无限期地等待代码中的按键,您将停止Builder执行其他所需的操作。
本质上,您只需要将代码分解为构建器代码组件中相应选项卡中的代码段(对于要在实验开始时,每个帧上执行的代码等),并避免无限期的功能喜欢event.waitKeys(),支持通过event.getKeys()
进行即时检查e.g。为了适应JonasLindeløv的第二个例子,在“Begin Routine”标签中,放置:
chars = list('0123456789.') # the valid characters
meanText = '' # start with an empty answer on each trial
在“每个框架”标签中,输入如下内容:
response = event.getKeys() # get a list of keys pressed at this instant
if len(response) > 0: # if there was one,
key = response[0] # just convenient shorthand
if key in chars:
meanText = meanText + response[0]
elif key == 'space':
meanText = meanText + ' '
elif key == 'backspace' and len(meanText) > 0:
meanText = meanText[:-1]
elif key == 'return':
thisExp.addData('Answer', meanText) # save the response
continueRoutine = False # finish this trial
# update the appropriate text stimulus with the current response value:
insertNameOfYourTextStimulusComponent.text = meanText