Psychopy CODER: Problemas que terminan con un bucle con respuesta clave

StackOverflow https://stackoverflow.com//questions/25037926

  •  21-12-2019
  •  | 
  •  

Pregunta

Intento ejecutar un experimento en el que el Participante cambie el tamaño del estímulo (en base a marco por marco) (es decir, presionar / mantener la tecla ARTUCTOR del tamaño, la tecla baja disminuye el tamaño) y confirmadousando la tecla ENTER.Descubrí que usar Key.stateHandle () de Pyglet es útil y básicamente, mi código funciona según lo previsto.Sin embargo, encuentro que se omiten algunos "ensayos".

Aquí está mi código:

from psychopy import visual, core, event
from pyglet.window import key 
win = visual.Window([1280,1024], fullscr=False, units='deg',monitor='testMonitor',winType='pyglet')
keyState=key.KeyStateHandler() 
win.winHandle.push_handlers(keyState) 

myCircle = visual.Circle(win,edges=128,radius=2.5,lineColor='black',fillColor='black',units='deg') 
myCircle2 = visual.Circle(win,edges=128,radius=2.5,lineColor='black',fillColor='black',units='deg') 
response=0

for i in range(5):
    sizeIni=1.0
    myCircle2.setRadius(sizeIni)
    myCircle2.setPos([0.0, -10.0])
    event.clearEvents()
    response=0
    while response <> 1: 
        response=None
        if keyState[key.UP]:
            sizeIni=sizeIni+0.03333
            if sizeIni>=10.0:
                sizeIni=10.0
            myCircle2.setRadius(sizeIni)
            response=0
        elif keyState[key.DOWN]:
            sizeIni=sizeIni-0.03333
            if sizeIni<=1.0:
                sizeIni=1.0
            myCircle2.setRadius(sizeIni)
            response=0            
        elif keyState[key.ENTER]:
            size=sizeIni
            print size
            response=1
        elif keyState[key.ESCAPE]:
            core.quit()        
        size=sizeIni
        myCircle.draw()
        myCircle2.draw()
        win.flip()

Esta rutina debe llevar a 5 ensayos, pero se saltan algunos ensayos.Aquí está la salida prototípica:

1.36663
1.0 # this trial is skipped 
1.6666
2.23321
1.0 # this trial is skipped 

El orden de los ensayos omitidos también es variable.Recibí el problema en dos computadoras diferentes (Ubuntu / Windows 7).¿Hay algún error obvio en mi código, o hay algún consejo cómo codificar el experimento de una manera diferente?

¿Fue útil?

Solución

Creo que el problema es que está comprobando si se presiona la tecla Intro, pero no si se libera antes de que se detecte nuevamente.I.E. Este código comprueba una vez en cada período de actualización de la pantalla para el estado clave.Es posible que el sujeto empuja a ingresar en respuesta a una prueba, pero entonces esa tecla aún se está reduciendo cuando la imagen se restablece a su tamaño original y comienza la siguiente prueba.

Debe realizar un seguimiento de si dos sucesivas detecciones de prensa clave se deben a la tecla ENTER, sin un período intermedio de ninguna tecla que no se presione, o que se detecte una de las otras.Supongo que esto no es necesario para las otras dos teclas, ya que desea responder a aquellas continuamente, mientras que las claves ingresadas deben ser tratadas como eventos discretos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top