PsychoPy入门_02_按键等待&反应时
2016-09-04 17:07
302 查看
上一篇里文字和图片的呈现是提前设定好了固定的秒数,如果想让它一直在屏幕上停留着,直到做出按键反应再继续怎么办呢?比如给被试看一片儿指导语,等他读完了按空格开始。
这时候就需要增加一个等待按键的语句。
我们沿用上次的代码,把文字部分的内容了一下,是这样的:
然后core.wait(0)时间改为0,下面增加:
这里有两个函数可以实现案件等待,event.waitKeys()和event.getKeys()。略有不同,waitKeys()可以设置最长等待时间,另外一个不行。还有运行上的差异,详情请查看官网event模块。
event.waitKeys()有三个参数:maxWait=inf,最长等待时间默认无限,可以设置为数字;keyList=None,默认为空,按任何一个键都可以;timeStamped=False,时间戳,并不常用。
这时候运行一下,文字的界面就会一直停留,直到你按个键才会继续。
在文字刺激下方添加时钟:
在刺激呈现之后重置时钟,然后在按键反应结束后获取时间。最后把键名和时间打印出来。刺激呈现这部分的代码就变成这样。
这时候运行一下,随便按个键,会在output区域得到类似这样的结果:[‘f’] 2.80920504301。list里是按键的结果,所用时间按秒计算,精度还是蛮高的。
给keyList一个列表,这样就只能按list里面指定的键才会继续运行下面的代码。
现在有两个选项,那么就可以根据按键的结果设置一个分支结构。通过对k_2的判断来设置。
这里我让按了‘f’键之后屏幕上出现一个“左字”,按‘j’键后出现“右”字。继续使用上面的文字刺激。把do something的地方补充完整:
好嘞,运行一下试试瞧。
按键等待和反应时的部分就说这些。完整代码如下:
就这些啦,有什么疑问或者建议请在下方评论。
这时候就需要增加一个等待按键的语句。
我们沿用上次的代码,把文字部分的内容了一下,是这样的:
#!/usr/bin/env python2 # -*- coding: utf-8 -*- from psychopy import visual, core win = visual.Window(fullscr = False, size = (1000,600), color = (-1,-1,-1)) text_1 = visual.TextStim(win, text = u'示例2', height = 0.1, pos = (0.0,0.2), color = 'pink', bold = True, italic = True) text_2 = visual.TextStim(win, text = u'', height = 0.1, pos = (0.0,-0.1), color = 'violet', bold = True, italic = False) text_2.text = u'请按任意键开始' text_1.draw() text_2.draw() win.flip() core.wait(2) pic = visual.ImageStim(win, image = 'test_l.JPG') pic.image = 'test_s.jpg' pic.draw() win.flip() core.wait(2) win.close() core.quit()
按键反应
首先,import这里增加个event。from psychopy import visual, core, event
然后core.wait(0)时间改为0,下面增加:
k_1 = event.waitKeys()
这里有两个函数可以实现案件等待,event.waitKeys()和event.getKeys()。略有不同,waitKeys()可以设置最长等待时间,另外一个不行。还有运行上的差异,详情请查看官网event模块。
event.waitKeys()有三个参数:maxWait=inf,最长等待时间默认无限,可以设置为数字;keyList=None,默认为空,按任何一个键都可以;timeStamped=False,时间戳,并不常用。
这时候运行一下,文字的界面就会一直停留,直到你按个键才会继续。
反应时
如果我想直到从这个刺激出现开始,到被试做出反应用了多长时间怎么做呢?下面说一下用core.Clock()来记录反应时的方法。在文字刺激下方添加时钟:
timer = core.Clock()
在刺激呈现之后重置时钟,然后在按键反应结束后获取时间。最后把键名和时间打印出来。刺激呈现这部分的代码就变成这样。
text_1.draw() text_2.draw() win.flip() core.wait(0) timer.reset() #重置时间0 k_1 = event.waitKeys() timeUse = timer.getTime() #获取时间 print k_1, timeUse
这时候运行一下,随便按个键,会在output区域得到类似这样的结果:[‘f’] 2.80920504301。list里是按键的结果,所用时间按秒计算,精度还是蛮高的。
反应选择
在图片下面也增加一个按键等待。k_2 = event.waitKeys(keyList = ['f','j'])
给keyList一个列表,这样就只能按list里面指定的键才会继续运行下面的代码。
现在有两个选项,那么就可以根据按键的结果设置一个分支结构。通过对k_2的判断来设置。
if k_2[0]=='f': # do someting else: # do other
这里我让按了‘f’键之后屏幕上出现一个“左字”,按‘j’键后出现“右”字。继续使用上面的文字刺激。把do something的地方补充完整:
if k_2[0]=='f': text_1.text = u'左' text_1.draw() win.flip() core.wait(2) else: text_1.text = u'右' text_1.draw() win.flip() core.wait(2)
好嘞,运行一下试试瞧。
按键等待和反应时的部分就说这些。完整代码如下:
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
#示例2
'''
按键反应
'''
#载入所需要的库
from psychopy import visual, core, event
#创建窗口
win = visual.Window(fullscr = False,
size = (1000,600),
color = (-1.0,-1.0,-1.0))
#文字
text_1 = visual.TextStim(win, text = u'示例2',
height = 0.12,
pos = (0.0,0.2),
bold = True,
italic = False,
color = 'pink')
text_2 = visual.TextStim(win, text = u'',
height = 0.1,
pos = (0.0,-0.2),
bold = True,
italic = False,
color = 'violet')
text_2.text= u'请按任意键继续'
#时钟
timer = core.Clock()
#呈现文字刺激
text_1.draw() text_2.draw() win.flip() core.wait(0) timer.reset() #重置时间0 k_1 = event.waitKeys() timeUse = timer.getTime() #获取时间 print k_1, timeUse
#图像
pic = visual.ImageStim(win, image = 'test_l.JPG')
pic.draw()
win.flip()
core.wait(0)
k_2 = event.waitKeys(keyList = ['f','j'])
if k_2[0]=='f': text_1.text = u'左' text_1.draw() win.flip() core.wait(2) else: text_1.text = u'右' text_1.draw() win.flip() core.wait(2)
'''
# 这里未做讲解,是我闲来无聊做了一个数字的倒计时。
dtimer = core.CountdownTimer(4)
while dtimer.getTime()>0:
text_2.text = str(int(dtimer.getTime()))
text_2.draw()
win.flip()
'''
win.close()
core.quit()
就这些啦,有什么疑问或者建议请在下方评论。
相关文章推荐
- scala入门-02基础知识->方法
- [Kotlin&Anko开发Android入门学习笔记]-02Kotlin如何使用Android第三方库
- iOS&&Swift入门(三)Button/按键
- ASP编程入门进阶(十三):Ad & Content Rotator
- Together® ControlCenter™ 6.0 入门实践教程
- Vista入门 Q&A
- Ruby 入门: BEGIN & END
- Hibernate入门02 - 第一个Hibernate程序
- o'reilly的几本不错的关于嵌入式开发的入门书籍
- ASP编程入门进阶(十四):Browser & Linking
- MSDN系列(14)--"NDIS Protocol Driver"入门
- AD & ADSI入门
- ASP编程入门进阶(十三):Ad & Content Rotator
- 游戏开发新手入门指导(Q&A)
- <<AI入门(10)>>(C)
- <<AI入门(9)>>(C)
- <<AI入门(5)>>(C)
- <<AI入门(6)>>(C)
- <<AI入门(3)>>(C)
- <<AI入门(4)>>(C)