2016-03-22 21 views
0

Matlab'da (psychtoolbox) bir komut dosyası hazırladım. İçinde 0 ve 100 olarak anılan bir görsel analog ölçeği kodladım. sağ ok tuşları. Katılımcı, deney protokolü bir sonraki uyarana geçmeden önce işaretçiyi istenen konuma taşımak için beş saniyeye sahiptir. PsychoPy benzer bir şey kodlamak için çalışma içindePsychoPy - Move RatingScale (İşaretleyici) sürekli olarak aşağı açılır anahtarda

, ben şu test kodu oluşturduk:

from psychopy import visual, core 
win = visual.Window([800,800]) 

# rating scale 
scale = visual.RatingScale(win, low=0, high=100, size=2, tickMarks=['0','100'], 
markerStart='50', marker='circle', textSize=.5, showValue=False, 
showAccept=False, noMouse=True, maxTime = 5) 

while scale.noResponse: 
    scale.draw() 
    win.flip() 

win.close() 

Bu kod aslında oldukça iyi başlamak için çalışır, ancak bu arada bir sorun var klavye giriş çalışmaları . İşaretçi, kullanıcı her defasında tuşa bastığında ve bastığında 1-nokta (0 ile 100 arasında) hareket eder. İstenilen sonuç, sol veya sağ tuşa basıldığında işaretleyicinin sürekli hareket etmesini sağlamaktır. Düşüncelerim, bunu PsychoPy'nin altta yatan kodunu düzenleyerek başarabileceğim, ancak bunun benim konfor alanımın biraz dışında olduğunu hissediyorum. Alternatif yöntemler için herhangi bir yardım büyük takdir edilecektir. Bu sadece kod için bir başlangıç, her şey yolunda!

, Patrick

+2

DÜZENLEME: RatingScale klavye olayları yakalamak için pyglet kullandığından, bu strateji işe yarar eğer emin değilim, ama burada (Hemen gider Sizi almak için çok hızlı ve test edilmemiş bir öneri): anahtar bültenlerini yakalamak için iohub modülünü kullanabilirsiniz: http://stackoverflow.com/questions/32729026/key-releases-psychopy?rq=1 ve Coder'daki iohub demosu -> demolar -> iohub -> klavye. Sonra her zaman saniyede 5 nokta hareket ederse, klavyenin dinlenmesi arasında bir '' core.wait (0.2) '' arasında bir süre var olabilir. –

cevap

1

teşekkürler ben bu sorgu sorununuzu çözer düşünüyorum: PsychoPy Key Down Code using ioHub

rating.markerPlacedAt her kareyi güncellemeniz gerekir şeydir. Aşağıda, her çerçeve bölümünün benim (oldukça çiğ) bir adaptasyon soyulmuş sürümü:

for event_io in keyboard.getEvents(): 
    if event_io.type == EventConstants.KEYBOARD_PRESS: 
     if event_io.key == u'right': 
      increment = 0.01 # move one step to the right 
     elif event_io.key == u'left': 
      increment = -0.01 # move one step to the left 
    if event_io.type == EventConstants.KEYBOARD_RELEASE: 
     increment = 0 # stop changing position 

if 0 < rating.markerPlacedAt < 1: 
    rating.markerPlacedAt += increment 
İlgili konular