我有一张包含12张图片的列表。它们都有不同的位置(也就是说,它们根本不重叠)。我想立刻把它们全部画出来。换句话说,我想在屏幕上同时看到所有12张图片。到目前为止,我只有这个:
lines = [line1,line2,line3,line4,line5,line6
line7,line8,line9,line10,line11,line12]
for i in range(12):
lines[i].draw()
但是,当然,在我按任意键后,此代码一次只能绘制一张图片。那么有一种方法可以同时绘制12张照片吗?
提前致谢!
答案 0 :(得分:2)
由于循环的设置方式,原始代码一次只绘制了一个图像 - 它(或多或少)说“对于circles
中的每个元素,绘制几个东西并翻转前面和回缓冲区“。每次缓冲区翻转时,除非您通过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()