似乎是一个愚蠢的问题,但我在文档中找不到如何在 PsychoPy Builder 实验中从用户那里获取文本输入。
例如,如果我有一个文本组件来显示消息“你叫什么名字?”
我想得到文本答案(键回显到屏幕上)并将其保存到结果文件中。
我是否必须进入代码并使用对话框?
谢谢
似乎是一个愚蠢的问题,但我在文档中找不到如何在 PsychoPy Builder 实验中从用户那里获取文本输入。
例如,如果我有一个文本组件来显示消息“你叫什么名字?”
我想得到文本答案(键回显到屏幕上)并将其保存到结果文件中。
我是否必须进入代码并使用对话框?
谢谢
谢谢迈克尔。看起来它可以解决问题,但我希望将一些更简单的东西交给非编程研究人员,所以我玩了一个游戏并想出了满足我要求的以下内容。
我已将代码插入 GitHub 此处https://github.com/jacanterbury/PsychoPy-snippets
但基本上它执行以下操作:
TextStim 文本字段包含以下内容:
$(word + '\n' + inputText)
同一循环中的代码对象具有以下内容:
开始实验:
inputText = ""
开始日常:
theseKeys=""
shift_flag = False
text_3.alignHoriz ='left'
每帧:
n= len(theseKeys)
i = 0
while i < n:
if theseKeys[i] == 'return':
# pressing RETURN means time to stop
continueRoutine = False
break
elif theseKeys[i] == 'backspace':
inputText = inputText[:-1] # lose the final character
i = i + 1
elif theseKeys[i] == 'space':
inputText += ' '
i = i + 1
elif theseKeys[i] in ['lshift', 'rshift']:
shift_flag = True
i = i + 1
else:
if len(theseKeys[i]) == 1:
# we only have 1 char so should be a normal key,
# otherwise it might be 'ctrl' or similar so ignore it
if shift_flag:
inputText += chr( ord(theseKeys[i]) - ord(' '))
shift_flag = False
else:
inputText += theseKeys[i]
i = i + 1
结束例程:
# let's store the final text string into the results finle...
thisExp.addData('inputText', inputText)
inputText=""
数据文件夹中的结果文件给出了按下的各个键以及最终的字符串
希望代码是相当不言自明的。唯一可能不明显的是 ascii 中的小写和大写字符是 1:1 和 32 分开的,这是单个空格的值(例如,在 ASCII 'a' = 'A' + ' ' 中)
随意评论/改进它(它目前不处理 SHIFT-LOCK 但应该很容易修复)
将它放入库中会很好,这样“每一帧”选项卡上的所有代码都可以换成一行
有两种选择:(1)使用您提到的对话框。您要么需要使主窗口不全屏,要么暂时将其最小化,以便可以在前面看到对话框。
(2) 自己处理按键并将它们以文本组件的形式镜像到屏幕上。是的,如果这是内置的,那就太好了,但目前还不是。通读这个广泛的线程以获取有关如何将此方法合并到 Builder 中的一些建议:https ://groups.google.com/forum/#!topic/psychopy-users/lE_bTMHUAoU
另请参阅此线程:https ://groups.google.com/forum/#!topic/psychopy-users/ DGXkU-31MPg,其中包含指向 Alex Holcombe 的某些代码的指针。