PsychoPy入門_02_按鍵等待&反應(yīng)時

不靠譜PsychoPy入門教程目錄:

  1. PsychoPy入門00安裝

  2. PsychoPy入門01文字和圖片的呈現(xiàn)

  3. PsychoPy入門02按鍵等待&反應(yīng)時

  4. PsychoPy入門03視頻和音頻的呈現(xiàn)

  5. PsychoPy入門04等級評定

  6. PsychoPy入門05循環(huán)和隨機(jī)

  7. PsychoPy入門06數(shù)據(jù)記錄

  8. PsychoPy入門07鼠標(biāo)的使用

  9. 用PsychoPy做視覺搜索任務(wù)實驗


上一篇里文字和圖片的呈現(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è)置最長等待時間,另外一個不行。還有運(yùn)行上的差異,詳情請查看官網(wǎng)event模塊。

event.waitKeys()有三個參數(shù):maxWait=inf,最長等待時間默認(rèn)無限,可以設(shè)置為數(shù)字;keyList=None,默認(rèn)為空,按任何一個鍵都可以;timeStamped=False,時間戳,并不常用。

這時候運(yùn)行一下,文字的界面就會一直停留,直到你按個鍵才會繼續(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

這時候運(yùn)行一下,隨便按個鍵,會在output區(qū)域得到類似這樣的結(jié)果:['f'] 2.80920504301。list里是按鍵的結(jié)果,所用時間按秒計算,精度還是蠻高的。

反應(yīng)選擇

在圖片下面也增加一個按鍵等待。

k_2 = event.waitKeys(keyList = ['f','j'])

給keyList一個列表,這樣就只能按list里面指定的鍵才會繼續(xù)運(yùn)行下面的代碼。

現(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的地方補(bǔ)充完整:

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ùn)行一下試試瞧。

按鍵等待和反應(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()

就這些啦,有什么疑問或者建議請在下方評論。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評論 25 708
  • 三月的麥地 已經(jīng)復(fù)活 每一棵麥子 都想起了自己的誓言 一陣風(fēng) 吹綠了它們的骨頭 一場雨 多么溫馨的告白
    簡村小吹閱讀 454評論 17 16
  • 世界上有兩件東西能夠深深地震撼人們的心靈 一件是我們心中崇高的道德準(zhǔn)則 另一件是我們頭頂上燦爛的星空 ——伊曼努爾...
    魔旅行閱讀 327評論 0 0
  • 這兩天由于小孩的濕疹,便秘加上老婆的乳腺炎,似乎過的有點(diǎn)糟糕。也終于能夠深刻地理解,為什么會有產(chǎn)后抑郁了。。。 繁...
    紳紳的帥老爸閱讀 270評論 0 1

友情鏈接更多精彩內(nèi)容