OpenSesame
Rapunzel Code Editor
DataMatrix
Support forum
Python Tutorials
MindProbe
Supported by

关于Python

在OpenSesame中,您可以仅使用图形用户界面(GUI)来创建复杂的实验。但有时您会遇到GUI所提供的功能不足的情况。在这些情况下,您可以向实验中添加Python代码。

在OSWeb的在线实验中不支持Python。如果您需要在线运行实验,您必须使用JavaScript

学习Python

您可以在 https://pythontutorials.eu/ 找到一组基本教程和练习,帮助您开始学习Python。

OpenSesame的图形用户界面中的Python

单个Python工作区

所有Python代码在单个Python工作区中执行。这意味着在一个inline_script中定义的变量在所有其他inline_script中以及内嵌在运行-如果语句和文本字符串中的Python语句中都是可以访问的。同样的原则适用于模块:一旦导入,它们就随处可用。

例如,您可以在一个 inline_script 中构建Canvas...

my_canvas = Canvas()
my_canvas.fixdot()

... 并在另一个 inline_script 中显示它...

my_canvas.show()

Inline_script项目

要在实验中使用Python代码,需要向实验中添加一个inline_script项目。您可以通过将Python图标(蓝/黄图标)从项目工具栏拖放到实验序列中来实现这一点。完成此操作后,您将看到类似于 Figure 1的内容。

/pages/zh/manual/python/img/about/inline-script.png

Figure 1. inline_script项目。

可以看到,inline_script项目有两个选项卡:一个用于准备阶段,另一个用于运行阶段。首先执行准备阶段,以便项目为时间关键的运行阶段做准备。在准备阶段构造Canvas对象、Sampler对象等是一种良好的实践,这样它们就可以在运行阶段无延迟地呈现。但这仅是约定,两个阶段都可以执行任意Python代码。

有关准备-运行策略的更多信息,请参见:

条件("if")表达式

您可以在条件表达式中使用单行Python表达式。例如,您可以将以下Python脚本用作运行-如果表达式(另请参见Figure 2):

correct == 1 and response_time < 1000

/pages/zh/manual/python/img/about/run-if.png

Figure 2.sequence项目的运行-if语句中使用Python脚本。

有关条件("if")表达式的更多信息,请参见:

文本字符串中的Python

您可以使用{...}语法在文本字符串中嵌入Python语句。这适用于简单的变量引用,还适用于单行表达式。例如,您可以将以下文本添加到sketchpad中:

分辨率为{width} x {height} px,共计{width * height}像素

根据您的实验分辨率,这可能会被计算为:

分辨率为1024 x 768 px,共786432像素

有关变量和文本的更多信息,请参见:

Jupyter控制台(调试窗口)

OpenSesame将标准输出重定向到控制台(或:调试窗口),您可以通过Control + D或通过菜单(菜单->查看->显示调试窗口;请参阅%FigDebugNormal)激活控制台。您可以使用print()打印到控制台。

print('这将显示在调试窗口中!')

控制台还是一个由project Jupyter提供支持的交互式Python解释器。

了解的事情

常用函数

许多常用函数可以直接在inline_script项目中使用,无需导入任何内容。例如:

# `Canvas()`是一个工厂函数,返回一个`Canvas`对象
fixdot_canvas = Canvas()
if sometimes(): # 有时修正点是绿色的
    fixdot_canvas.fixdot(color='green')
else: # 有时它是红色的
    fixdot_canvas.fixdot(color='red')
fixdot_canvas.show()

如需常用函数的列表,参见:

-https://osdoc.cogsci.nl/4.0/zh/manual/python/common

var对象:访问实验变量

__版本说明__从OpenSesame 4.0版本开始,所有实验变量都作为全局变量可用。这意味着你不再需要var对象。

你可以通过var对象来访问实验变量:

# OpenSesame <= 3.3(带var对象)
# 获取实验变量
print('my_variable is: %s' % var.my_variable)
# 设置实验变量
var.my_variable = 'my_value'

# OpenSesame >= 4.0(不带var对象)
# 获取实验变量
print('my_variable is: %s' % my_variable)
# 设置实验变量
my_variable = 'my_value'

var对象的完整概览可以在此处找到:

-https://osdoc.cogsci.nl/4.0/zh/manual/python/var

clock对象:时间函数

基本的时间函数通过clock对象可以利用:

# 获取当前的时间戳
t = clock.time()
# 等待1秒
clock.sleep(1000)

clock对象的完整概览可以在此处找到:

-https://osdoc.cogsci.nl/4.0/zh/manual/python/clock

log对象:数据记录

数据记录通过log对象可以利用:

# 写一行文本
log.write('My custom log message')
# 写入所有变量
log.write_vars()

log对象的完整概览可以在此处找到:

-https://osdoc.cogsci.nl/4.0/zh/manual/python/log

pool对象:访问文件池

你可以通过pool对象获取文件池中文件的完整路径:

# 显示文件池中的一个图片
path = pool['img.png']
my_canvas = Canvas()
my_canvas.image(path)
my_canvas.show()

pool对象的完整概览可以在此处找到:

-https://osdoc.cogsci.nl/4.0/zh/manual/python/pool

responses对象:访问参与者响应

responses对象记录了实验过程中收集的所有参与者响应。例如,列出迄今为止所有响应的正确性:

for response in responses:
    print(response.correct)

responses对象的完整概览可以在此处找到:

-https://osdoc.cogsci.nl/4.0/zh/manual/python/responses

Canvas类:呈现视觉刺激

Canvas类用于呈现视觉刺激。例如,你可以按以下方式显示一个固定点:

my_canvas = Canvas()
my_canvas.fixdot()
my_canvas.show()

Canvas类的完整概览可以在此处找到:

-https://osdoc.cogsci.nl/4.0/zh/manual/python/canvas

Keyboard类:收集按键操作

Keyboard类用于收集按键操作。例如,收集一个具有1000毫秒超时的按键操作:

my_keyboard = Keyboard(timeout=1000)
key, time = my_keyboard.get_key()

Keyboard类的完整概览可以在此处找到:

-https://osdoc.cogsci.nl/4.0/zh/manual/python/keyboard

Mouse类:收集鼠标点击和屏幕触摸

Mouse类用于收集鼠标点击和屏幕触摸。(OpenSesame在两者之间不做区分。)例如,收集一个具有1000毫秒超时的鼠标点击:

my_mouse = Mouse(timeout=1000)
button, position, time = my_mouse.get_click()

Mouse类的完整概览可以在此处找到:

-https://osdoc.cogsci.nl/4.0/zh/manual/python/mouse

Sampler类:声音播放

Sampler类用于播放声音样本。例如,播放一个简单的蜂鸣声:

my_sampler = Sampler()
my_sampler.play()

Sampler类的完整概览可以在此处找到:

-https://osdoc.cogsci.nl/4.0/zh/manual/python/sampler

显示表现、响应收集等的替代模块

psychopy

如果您正在使用psycho 后端,您可以直接使用各种 PsychoPy 模块。更多信息请查阅:

  • %link:backends%

expyriment

如果您正在使用 xpyriment 后端,您可以直接使用各种 Expyriment 模块。更多信息请查阅:

  • %link:backends%

pygame

如果您正在使用 legacydroid,或 xpyriment (仅在 "Use OpenGL" 设置为 "no" 时)后端,您可以直接使用各种 PyGame 模块。更多信息请查阅:

  • %link:backends%
Supported by