Psychopy:一次从列表中绘制所有图像
Psychopy: draw all images from a list at once
我有一个包含 12 张图片的列表。它们都有不同的位置(也就是说,它们根本不重叠)。我想一次画完它们。换句话说,我想在屏幕上同时看到所有 12 张图片。到目前为止,我只得到了这个:
lines = [line1,line2,line3,line4,line5,line6
line7,line8,line9,line10,line11,line12]
for i in range(12):
lines[i].draw()
但是,当然,这段代码在我按下任意键后一次只绘制一张图片。那么有没有办法同时绘制12张图片呢?
提前致谢!
由于循环的设置方式,您的原始代码一次只能绘制一张图像——它(或多或少)说 "For each element in circles
, draw several things and flip the front and back buffers"。每次缓冲区翻转时,除非您通过 win.flip(clearBuffer = False)
另行通知,否则屏幕上之前的内容将被删除。要同时绘制图像,您可以循环遍历图像列表并在每个元素上调用 draw()
方法,例如:
for i in imglist:
i.draw()
win.flip()
如果您愿意放弃对单个图像属性的控制,一种方法是使用 BufferImageStim。这需要更长的时间来初始化,但可能比绘制单个图像更快(我没有正确计时)。两种方法都在下面进行了演示。
from psychopy import visual, event, core
import urllib
import random
win = visual.Window([400, 400], fullscr = False)
# picture of a cat, save to file
urllib.urlretrieve('https://s-media-cache-ak0.pinimg.com/736x/' +
'07/c3/45/07c345d0eca11d0bc97c894751ba1b46.jpg', 'tmp.jpg')
# create five images with (probably) unique positions
imglist = [visual.ImageStim(win = win, image = 'tmp.jpg',
size = (.2, .2),
pos = ((random.random() - 0.5) * 2,
(random.random() - 0.5) * 2))
for i in xrange(5)]
# draw individual images
for i in imglist:
i.draw()
win.flip()
# wait for key press, then clear window
event.waitKeys()
win.flip()
core.wait(0.5)
# create aggregate stimulus (should look identical)
buffs = visual.BufferImageStim(win, stim = imglist)
buffs.draw()
win.flip()
event.waitKeys()
core.quit()
我有一个包含 12 张图片的列表。它们都有不同的位置(也就是说,它们根本不重叠)。我想一次画完它们。换句话说,我想在屏幕上同时看到所有 12 张图片。到目前为止,我只得到了这个:
lines = [line1,line2,line3,line4,line5,line6
line7,line8,line9,line10,line11,line12]
for i in range(12):
lines[i].draw()
但是,当然,这段代码在我按下任意键后一次只绘制一张图片。那么有没有办法同时绘制12张图片呢?
提前致谢!
由于循环的设置方式,您的原始代码一次只能绘制一张图像——它(或多或少)说 "For each element in circles
, draw several things and flip the front and back buffers"。每次缓冲区翻转时,除非您通过 win.flip(clearBuffer = False)
另行通知,否则屏幕上之前的内容将被删除。要同时绘制图像,您可以循环遍历图像列表并在每个元素上调用 draw()
方法,例如:
for i in imglist:
i.draw()
win.flip()
如果您愿意放弃对单个图像属性的控制,一种方法是使用 BufferImageStim。这需要更长的时间来初始化,但可能比绘制单个图像更快(我没有正确计时)。两种方法都在下面进行了演示。
from psychopy import visual, event, core
import urllib
import random
win = visual.Window([400, 400], fullscr = False)
# picture of a cat, save to file
urllib.urlretrieve('https://s-media-cache-ak0.pinimg.com/736x/' +
'07/c3/45/07c345d0eca11d0bc97c894751ba1b46.jpg', 'tmp.jpg')
# create five images with (probably) unique positions
imglist = [visual.ImageStim(win = win, image = 'tmp.jpg',
size = (.2, .2),
pos = ((random.random() - 0.5) * 2,
(random.random() - 0.5) * 2))
for i in xrange(5)]
# draw individual images
for i in imglist:
i.draw()
win.flip()
# wait for key press, then clear window
event.waitKeys()
win.flip()
core.wait(0.5)
# create aggregate stimulus (should look identical)
buffs = visual.BufferImageStim(win, stim = imglist)
buffs.draw()
win.flip()
event.waitKeys()
core.quit()