不靠譜PsychoPy入門教程目錄:
上一篇里文字和圖片的呈現(xiàn)是提前設(shè)定好了固定的秒數(shù)壶谒,如果想讓它一直在屏幕上停留著,直到做出按鍵反應(yīng)再繼續(xù)怎么辦呢?比如給被試看一片兒指導(dǎo)語,等他讀完了按空格開始盼铁。
這時候就需要增加一個等待按鍵的語句。
我們沿用上次的代碼玫霎,把文字部分的內(nèi)容了一下褥蚯,是這樣的:
#!/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()
這里有兩個函數(shù)可以實現(xiàn)案件等待训挡,event.waitKeys()和event.getKeys()。略有不同歧强,waitKeys()可以設(shè)置最長等待時間澜薄,另外一個不行。還有運行上的差異摊册,詳情請查看官網(wǎng)event模塊肤京。
event.waitKeys()有三個參數(shù):maxWait=inf,最長等待時間默認(rèn)無限茅特,可以設(shè)置為數(shù)字忘分;keyList=None棋枕,默認(rèn)為空,按任何一個鍵都可以饭庞;timeStamped=False,時間戳熬荆,并不常用舟山。
這時候運行一下,文字的界面就會一直停留卤恳,直到你按個鍵才會繼續(xù)累盗。
如果我想直到從這個刺激出現(xiàn)開始,到被試做出反應(yīng)用了多長時間怎么做呢突琳?下面說一下用core.Clock()來記錄反應(yīng)時的方法若债。
反應(yīng)時
在文字刺激下方添加時鐘:
timer = core.Clock()
在刺激呈現(xiàn)之后重置時鐘,然后在按鍵反應(yīng)結(jié)束后獲取時間拆融。最后把鍵名和時間打印出來蠢琳。刺激呈現(xiàn)這部分的代碼就變成這樣。
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區(qū)域得到類似這樣的結(jié)果:['f'] 2.80920504301。list里是按鍵的結(jié)果趟脂,所用時間按秒計算泰讽,精度還是蠻高的。
反應(yīng)選擇
在圖片下面也增加一個按鍵等待昔期。
k_2 = event.waitKeys(keyList = ['f','j'])
給keyList一個列表已卸,這樣就只能按list里面指定的鍵才會繼續(xù)運行下面的代碼。
現(xiàn)在有兩個選項硼一,那么就可以根據(jù)按鍵的結(jié)果設(shè)置一個分支結(jié)構(gòu)累澡。通過對k_2的判斷來設(shè)置。
if k_2[0]=='f':
# do someting
else:
# do other
這里我讓按了‘f’鍵之后屏幕上出現(xiàn)一個“左字”般贼,按‘j’鍵后出現(xiàn)“右”字永乌。繼續(xù)使用上面的文字刺激。把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)
好嘞具伍,運行一下試試瞧翅雏。
按鍵等待和反應(yīng)時的部分就說這些。
完整代碼如下:
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
#示例2
'''
按鍵反應(yīng)
'''
#載入所需要的庫
from psychopy import visual, core, event
#創(chuàng)建窗口
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'請按任意鍵繼續(xù)'
#時鐘
timer = core.Clock()
#呈現(xiàn)文字刺激
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)
'''
# 這里未做講解人芽,是我閑來無聊做了一個數(shù)字的倒計時望几。
dtimer = core.CountdownTimer(4)
while dtimer.getTime()>0:
text_2.text = str(int(dtimer.getTime()))
text_2.draw()
win.flip()
'''
win.close()
core.quit()
就這些啦,有什么疑問或者建議請在下方評論萤厅。