Спасибо, Майкл. Казалось, что это сработает, но я надеялся, что что-то более простое передаст исследователю, не занимающемуся программированием, поэтому я поиграл и придумал следующее, которое удовлетворяет моим требованиям.
Я вставил код в 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, но это должно быть легко исправить)
Было бы неплохо поместить его в библиотеку, чтобы весь код на вкладке «Каждый кадр» можно было заменить одной строкой.
person
jacanterbury
schedule
16.10.2014