心理学:立即从列表中绘制所有图像

时间:2016-12-13 14:38:31

标签: python image draw psychopy

我有一张包含12张图片的列表。它们都有不同的位置(也就是说,它们根本不重叠)。我想立刻把它们全部画出来。换句话说,我想在屏幕上同时看到所有12张图片。到目前为止,我只有这个:

    lines = [line1,line2,line3,line4,line5,line6
            line7,line8,line9,line10,line11,line12]

    for i in range(12):
        lines[i].draw()

但是,当然,在我按任意键后,此代码一次只能绘制一张图片。那么有一种方法可以同时绘制12张照片吗?

提前致谢!

1 个答案:

答案 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()