Acerca de Python
En OpenSesame puedes crear experimentos complejos utilizando solo la interfaz gráfica de usuario (GUI). Pero a veces te encontrarás con situaciones en las que la funcionalidad proporcionada por la GUI es insuficiente. En estos casos, puedes agregar código Python a tu experimento.
Python no es compatible con experimentos en línea con OSWeb. Si necesitas ejecutar tu experimento en línea, debes usar JavaScript en su lugar.
- Aprendiendo Python
- Python en la GUI de OpenSesame
- Cosas que debes saber
- Funciones comunes
- El objeto var: Acceso a las variables experimentales
- El objeto clock: Funciones de tiempo
- El objeto log: Registro de datos
- El objeto pool: Acceso al depósito de archivos
- El objeto responses: Acceso a las respuestas de los participantes
- La clase Canvas: Presentación de estímulos visuales
- La clase Keyboard: Recolección de teclas presionadas
- La clase Mouse: Recolección de clics de ratón y toques en pantalla
- La clase Sampler: Reproducción de sonido
- Módulos alternativos para la presentación de visualización, recolección de respuesta, etc.
Aprendiendo Python
Puedes encontrar un conjunto de tutoriales básicos y ejercicios para comenzar con Python en https://pythontutorials.eu/.
Python en la GUI de OpenSesame
Un único espacio de trabajo Python
Todo el código Python se ejecuta en un único espacio de trabajo Python. Esto significa que las variables que se han definido en un inline_script son accesibles en todos los otros inline_scripts, así como en las declaraciones de Python que están incrustadas en las declaraciones de ejecución si (run-if) y en cadenas de texto. El mismo principio se aplica a los módulos: una vez que se import
an, están disponibles en todas partes.
Por ejemplo, puedes construir simplemente el Canvas
en un inline_script ...
my_canvas = Canvas()
my_canvas.fixdot()
... y mostrarlo en otro inline_script ...
my_canvas.show()
Elementos Inline_script
Para usar código Python, debes agregar un elemento inline_script a tu experimento. Puedes hacer esto arrastrando el icono de Python (el ícono azul/amarillo) desde la barra de herramientas de elementos en la secuencia del experimento. Después de hacer esto, verás algo como Figure 1.
Como puedes ver, el elemento inline_script consta de dos pestañas: una para la fase de Preparación (Prepare) y otra para la fase de Ejecución (Run). La fase de Preparación se ejecuta primero, para permitir que los elementos se preparen para la fase de ejecución crítica por tiempo. Es una buena práctica construir objetos Canvas
, objetos Sampler
, etc. durante la fase de Preparación, de modo que puedan presentarse sin demora durante la fase de Ejecución. Pero esto es solo una convención; puedes ejecutar código Python arbitrario durante ambas fases.
Para obtener más información sobre la estrategia de preparación-ejecución, consulta:
Expresiones condicionales ("if")
Puedes usar expresiones de Python de una sola línea en expresiones condicionales. Por ejemplo, puedes usar el siguiente código de Python como una expresión de ejecución si (run-if) (ver también Figure 2):
correct == 1 and response_time < 1000
Para obtener más información sobre las expresiones condicionales ("if"), consulta:
Python en cadenas de texto
Puedes incrustar declaraciones de Python en cadenas de texto usando la sintaxis {...}. Esto funciona para referencias de variables simples, así como para expresiones de una sola línea. Por ejemplo, podrías agregar el siguiente texto en un sketchpad:
La resolución es {width} x {height} px, lo que es un total de {width * height} píxeles
Dependiendo de la resolución de tu experimento, esto podría evaluarse como:
La resolución es 1024 x 768 px, lo que es un total de 786432 píxeles
Para obtener más información sobre variables y texto, consulta:
La consola de Jupyter (ventana de depuración)
OpenSesame redirige la salida estándar a la consola (o ventana de depuración), que puedes activar utilizando Control + D o a través del menú (Menú -> Ver -> Mostrar ventana de depuración; ver %FigDebugNormal). Puedes imprimir en la consola usando print()
.
print('¡Esto aparecerá en la ventana de depuración!')
La consola también es un intérprete interactivo de Python impulsado por project Jupyter.
Cosas que debes saber
Funciones comunes
Muchas funciones comunes están disponibles directamente en un elemento inline_script, sin necesidad de importar nada. Por ejemplo:
# `Canvas()` es una función de fábrica que devuelve un objeto `Canvas`
fixdot_canvas = Canvas()
if sometimes(): # A veces el fixdot es verde
fixdot_canvas.fixdot(color='green')
else: # A veces es rojo
fixdot_canvas.fixdot(color='red')
fixdot_canvas.show()
Para ver una lista de funciones comunes, consulte:
El objeto var
: Acceso a las variables experimentales
Nota de la versión A partir de OpenSesame 4.0, todas las variables experimentales están disponibles como globales. Esto significa que ya no necesita el objeto var
.
Puede acceder a las variables experimentales a través del objeto var
:
# OpenSesame <= 3.3 (con objeto var)
# Obtener una variable experimental
print('my_variable es: %s' % var.my_variable)
# Configurar una variable experimental
var.my_variable = 'my_value'
# OpenSesame >= 4.0 (sin objeto var)
# Obtener una variable experimental
print('my_variable es: %s' % my_variable)
# Configurar una variable experimental
my_variable = 'my_value'
Se puede encontrar una descripción general completa del objeto var
aquí:
El objeto clock
: Funciones de tiempo
Las funciones de tiempo básicas están disponibles a través del objeto clock
:
# Obtener la marca de tiempo actual
t = clock.time()
# Esperar 1 s
clock.sleep(1000)
Se puede encontrar una descripción general completa del objeto clock
aquí:
El objeto log
: Registro de datos
El registro de datos está disponible a través del objeto log
:
# Escribir una línea de texto
log.write('Mi mensaje de registro personalizado')
# Escribir todas las variables
log.write_vars()
Se puede encontrar una descripción general completa del objeto log
aquí:
El objeto pool
: Acceso al depósito de archivos
Obtiene la ruta completa a un archivo en el depósito de archivos a través del objeto pool
:
# Mostrar una imagen del depósito de archivos
path = pool['img.png']
my_canvas = Canvas()
my_canvas.image(path)
my_canvas.show()
Se puede encontrar una descripción general completa del objeto pool
aquí:
El objeto responses
: Acceso a las respuestas de los participantes
El objeto responses
lleva un registro de todas las respuestas de los participantes que se han recogido durante el experimento. Por ejemplo, para listar la corrección de todas las respuestas hasta ahora:
for response in responses:
print(response.correct)
Se puede encontrar una descripción general completa del objeto responses
aquí:
La clase Canvas
: Presentación de estímulos visuales
La clase Canvas
se utiliza para presentar estímulos visuales. Por ejemplo, puede mostrar un punto de fijación de la siguiente manera:
my_canvas = Canvas()
my_canvas.fixdot()
my_canvas.show()
Se puede encontrar una descripción general completa de la clase Canvas
aquí:
La clase Keyboard
: Recolección de teclas presionadas
La clase Keyboard
se utiliza para recoger presiones de teclas. Por ejemplo, para recoger una presión de tecla con un tiempo de espera de 1000 ms:
my_keyboard = Keyboard(timeout=1000)
key, time = my_keyboard.get_key()
Se puede encontrar una descripción general completa de la clase Keyboard
aquí:
La clase Mouse
: Recolección de clics de ratón y toques en pantalla
La clase Mouse
se utiliza para recoger clics de ratón y toques en pantalla. (OpenSesame no hace distinción entre los dos.) Por ejemplo, para recoger un clic de ratón con un tiempo de espera de 1000 ms:
my_mouse = Mouse(timeout=1000)
button, position, time = my_mouse.get_click()
Se puede encontrar una descripción general completa de la clase Mouse
aquí:
La clase Sampler
: Reproducción de sonido
La clase Sampler
se utiliza para reproducir muestras de sonido. Por ejemplo, para reproducir un simple beep:
my_sampler = Sampler()
my_sampler.play()
Se puede encontrar una descripción general completa de la clase Sampler
aquí:
Módulos alternativos para la presentación de visualización, recolección de respuesta, etc.
psychopy
Si estás utilizando el backend psycho, puedes usar directamente los varios módulos PsychoPy. Para más información, consulta:
expyriment
Si estás utilizando el backend xpyriment, puedes usar directamente los varios módulos Expyriment. Para más información, consulta:
pygame
Si estás utilizando el backend legacy, droid, o xpyriment (solo con "Use OpenGL" configurado en "no"), puedes usar directamente varios módulos PyGame. Para más información, consulta: