#-*- coding:utf-8 -*-
"""
This file is part of OpenSesame.
OpenSesame is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenSesame is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenSesame. If not, see <http://www.gnu.org/licenses/>.
"""
from libopensesame.py3compat import *
import warnings
import random
import pygame
import math
from libopensesame.exceptions import osexception
from libopensesame.html import html
from openexp.backend import backend, configurable
from openexp.color import color
class canvas(backend):
"""
desc: |
The `canvas` class is used to present visual stimuli.
__Example__:
~~~ .python
# Create and show a canvas with a central fixation dot
my_canvas = canvas()
my_canvas.fixdot()
my_canvas.show()
~~~
If drawing on a `canvas` is slow, especially if you draw many stimuli,
you should disable `auto_prepare` and explicitly call `canvas.prepare()`
after all drawing operations are done, but before calling
`canvas.show()`.
__Example__:
~~~ .python
import random
import string
# Create and show a canvas with a grid of random letters
my_canvas = canvas(auto_prepare=False)
for x, y in xy_grid(n=10, spacing=20):
letter = random.choice(string.ascii_uppercase)
my_canvas.text(text=letter, x=x, y=y)
my_canvas.prepare()
my_canvas.show()
~~~
[TOC]
## Things to know
### Coordinates
- When *Uniform coordinates* is set to 'yes', coordinates are
relative to the center of the display. That is, (0,0) is the center.
This is the default as of OpenSesame 3.0.0.
- When *Uniform coordinates* is set to 'no', coordinates are relative to
the top-left of the display. That is, (0,0) is the top-left. This was
the default in OpenSesame 2.9.X and earlier.
### Style keywords
All functions that accept `**style_args` take the following keyword
arguments:
- `color` specifies the foreground color. For valid color
specifications, see [colors].
- `background_color` specifies the background color. For valid color
specifications, see [colors].
- `fill` indicates whether rectangles, circles, polygons, and ellipses
are filled (`True`), or drawn as an outline (`False`).
- `penwidth` indicates a penwidth in pixels and should be `int` or
`float`.
- `bidi` indicates whether bidirectional-text support is enabled, and
should be `True` or `False`.
- `html` indicates whether HTML-tags are interpreted, and should be
`True` or `False`. For supported tags, see [/usage/text/]().
- `font_family` is the name of a font family, such as 'sans'.
- `font_size` is a font size in pixels.
- `font_italic` indicates whether text should italics, and should be
`True` or `False`.
- `font_bold` indicates whether text should bold, and should be
`True` or `False`.
- `font_underline` indicates whether text should underlined, and should
be `True` or `False`.
~~~ .python
# Draw a green fixation dot
my_canvas = canvas()
my_canvas.fixdot(color='green')
my_canvas.show()
~~~
Style keywords only affect the current drawing operation (except when
passed to [canvas.\_\_init\_\_][__init__]). To change the style for all
subsequent drawing operations, set style properties, such as
[canvas.color], directly:
~~~ .python
# Draw a red cross with a 2px penwidth
my_canvas = canvas()
my_canvas.color = u'red'
my_canvas.penwidth = 2
my_canvas.line(-10, -10, 10, 10)
my_canvas.line(-10, 10, 10, -10)
my_canvas.show()
~~~
Or pass the style properties to [canvas.\_\_init\_\_][__init__]:
~~~ .python
# Draw a red cross with a 2px penwidth
my_canvas = canvas(color=u'red', penwidth=2)
my_canvas.line(-10, -10, 10, 10)
my_canvas.line(-10, 10, 10, -10)
my_canvas.show()
~~~
### Colors
You can specify colors in the following CSS3-compatible ways:
- __Color names:__ 'red', 'black', etc. A full list of valid color names
can be found
[here](http://www.w3.org/TR/SVG11/types.html#ColorKeywords).
- __Seven-character hexadecimal strings:__ '#FF0000', '#000000', etc.
Here, values range from '00' to 'FF', so that '#FF0000' is bright red.
- __Four-character hexadecimal strings:__ '#F00', '#000', etc. Here,
values range from '0' to 'F' so that '#F00' is bright red.
- __RGB strings:__ 'rgb(255,0,0)', 'rgb(0,0,0)', etc. Here, values
range from '0' to '255' so that 'rgb(255,0,0)' is bright red.
- __RGB percentage strings:__ 'rgb(100%,0%,0%)', 'rgb(0%,0%,0%)', etc.
Here, values range from '0%' to '100%' so that 'rgb(100%,0%,0%)' is
bright red.
- __RGB tuples:__ `(255, 0, 0)`, `(0, 0 ,0)`, etc. Here, values range
from `0` to `255` so that `(255,0,0)' is bright red.
- __Luminance values:__ `255`, `0`, etc. Here, values range from `0` to
`255` so that `255` is white.
~~~ .python
# Various ways to specify green
my_canvas.fixdot(color=u'green')
my_canvas.fixdot(color=u'#00ff00')
my_canvas.fixdot(color=u'#0f0')
my_canvas.fixdot(color=u'rgb(0,255,0)')
my_canvas.fixdot(color=u'rgb(0%,100%,0%)')
my_canvas.fixdot(color=(0,255,0))
# Specify a luminance value (white)
my_canvas.fixdot(color=255)
~~~
%--
constant:
arg_max_width: |
The maximum width of the text in pixels, before wrapping to a
new line, or `None` to wrap at screen edge.
arg_bgmode: |
Specifies whether the background is the average of col1 col2
('avg', corresponding to a typical Gabor patch), or equal to
col2 ('col2'), useful for blending into the background. Note:
this parameter is ignored by the psycho backend, which uses
increasing transparency for the background.
arg_style: |
Optional [style keywords] that specify the style of the current
drawing operation. This does not affect subsequent drawing
operations.
--%
"""
def __init__(self, experiment, auto_prepare=True, **style_args):
"""
desc: |
Constructor to create a new `canvas` object. You do not generally
call this constructor directly, but use the `canvas()` function,
which is described here: [/python/common/]().
arguments:
experiment:
desc: The experiment object.
type: experiment
keywords:
auto_prepare:
desc: Indicates whether the canvas should be automatically
prepared after each drawing operation, so that
[canvas.show] will be maximally efficient. If
auto_prepare is turned off, drawing operations may
be faster, but [canvas.show] will take longer,
unless [canvas.prepare] is explicitly called in
advance. Generally, it only makes sense to disable
auto_prepare when you want to draw a large number
of stimuli, as in the second example above.
Currently, the auto_prepare parameter only applies
to the xpyriment backend, and is ignored by the
other backends.
type: bool
keyword-dict:
style_args:
Optional [style keywords], which will be used as the default
for all drawing operations on this `canvas`.
example: |
# Example 1: Show a central fixation dot.
my_canvas = canvas()
my_canvas.fixdot()
my_canvas.show()
# Example 2: Show many randomly positioned fixation dot. Here we
# disable `auto_prepare`, so that drawing goes more quickly.
from random import randint
my_canvas = canvas(auto_prepare=False)
for i in range(1000):
x = randint(0, my_canvas.width)
y = randint(0, my_canvas.height)
my_canvas.fixdot(x, y)
my_canvas.prepare()
my_canvas.show()
"""
self.experiment = experiment
self._width = self.experiment.var.
没有合适的资源?快使用搜索试试~ 我知道了~
基于Python的OpenSesame实验心理学软件设计源码
共627个文件
py:334个
md:78个
yaml:49个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 56 浏览量
2024-09-26
01:20:15
上传
评论
收藏 37.84MB ZIP 举报
温馨提示
该项目是一款基于Python的OpenSesame实验心理学软件设计源码,涵盖627个文件,包括334个Python脚本、79个Markdown文档、49个YAML配置、44个PNG图片、23个UI界面文件、20个实验脚本、11个JSON数据、11个字体文件、10个音频文件、8个国际化文件。该源码支持Python、TypeScript、HTML和CSS等多种编程语言,适用于心理学实验设计和数据分析。
资源推荐
资源详情
资源评论
收起资源包目录
基于Python的OpenSesame实验心理学软件设计源码 (627个子文件)
stdeb.cfg 600B
setup.cfg 26B
qt.conf 26B
COPYING 34KB
copyright 3KB
markdown.css 2KB
icon_map.csv 5KB
test.csv 38B
quickrun.csv 0B
opensesame.desktop 291B
pp_io.html 1KB
opensesame.icns 368KB
opensesamerun.ico 4KB
opensesame.ico 4KB
MANIFEST.in 376B
android-presplash.jpg 17KB
android-splash.jpg 17KB
info.json 2KB
info.json 2KB
info.json 1KB
info.json 995B
info.json 824B
info.json 726B
info.json 321B
setup-mac-nodeappdmg.json 297B
android.json 286B
info.json 200B
info.json 120B
offline_help.md 5KB
offline_help.md 5KB
offline_help.md 4KB
srbox.md 2KB
srbox.md 2KB
external_script.md 1KB
external_script.md 1KB
external_script.md 1KB
video_player.md 1KB
video_player.md 1KB
video_player.md 998B
new-user.md 978B
report.md 961B
joystick.md 946B
report.md 931B
joystick.md 917B
fixation_dot.md 913B
new-user.md 910B
fixation_dot.md 851B
joystick.md 844B
new-user.md 836B
report.md 821B
fixation_dot.md 813B
reset_feedback.md 752B
reset_feedback.md 726B
reset_feedback.md 685B
old-experiment.md 657B
old-experiment.md 620B
touch_response.md 620B
port_reader.md 598B
advanced_delay.md 592B
touch_response.md 583B
get_started.md 580B
get_started.md 572B
touch_response.md 559B
parallel.md 550B
old-experiment.md 540B
repeat_cycle.md 535B
advanced_delay.md 531B
get_started.md 525B
new-experiment.md 522B
advanced_delay.md 513B
new_item_warning.md 486B
new_item_warning.md 445B
finished.md 436B
finished.md 408B
finished.md 387B
new_item_warning.md 376B
missing.md 217B
failed.md 206B
update-available.md 200B
failed.md 189B
missing.md 185B
update-available.md 176B
missing.md 171B
failed.md 166B
update-available.md 157B
notepad.md 155B
notepad.md 142B
notepad.md 130B
failure.md 123B
failure.md 122B
quest_staircase_init.md 121B
success.md 109B
system-information.md 108B
system-information.md 103B
system-information.md 99B
success.md 95B
failure.md 92B
up-to-date.md 89B
quest_staircase_next.md 87B
up-to-date.md 81B
共 627 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
wjs2024
- 粉丝: 1628
- 资源: 2211
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Vue与TypeScript的会员卡项目设计源码
- IT类课程习题-微机原理-C#
- 基于图像分割与处理的港口系泊缆绳自动判定设计源码
- 基于Java语言的hyperlpr3安卓车牌识别SDK设计源码
- Dev-C++5.11
- 基于WebAssembly的PineTime智能手表表盘模拟器LVGL移植设计源码
- 基于Java的Fizz-Gateway-Node微服务API聚合设计源码
- 基于Java及JavaScript的mlearning项目搬家设计源码
- 基于CSS、HTML和JavaScript的考试作业系统设计源码
- 基于Bootstrap 4.4.1的Light Year Admin Iframe v4后台管理模板设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功