Python / Psychopy:从类中实例化多个圆形对象

时间:2017-06-05 14:21:04

标签: python class psychopy

我创建了一个包含圆圈的类(一个Psychopy Circle对象)。我想知道如何使用这个类来实例化2个圆形对象,例如,每个圆形对象具有不同的填充颜色。

class Circle(object):
    def __init__(self):
        self.circle = visual.Circle(win, units = 'deg', pos=(1,1), 
        radius=1, lineColor="black", fillColor="red")

        self.components = [self.circle]

    def draw(self):
        [component.draw() for component in self.components]

circle=Circle() #red colour
circle2=Circle() #blue colour if possible

我是否有办法在访问某些visual.circle参数时实例化circle2,例如改变它的位置或填充颜色?这是我第一次使用课程。目前,如果我画'圈'和' cirle2'在屏幕上,一个简单地覆盖另一个,因为一个只是另一个的副本。

干杯, 乔恩

2 个答案:

答案 0 :(得分:2)

根据你在评论中的澄清,我假设你想要这样的东西:

class Circle(psychopy.visual.circle.Circle):
    def __init__(self, win, lineColor='black', fillColor='red'):
        super(Circle, self).__init__(
            win=win, lineColor=lineColor, fillColor=fillColor, units='deg',
            pos=(1,1), radius=1)

Circle默认为units='deg'pos=(1,1)radius=1。但是,您可以为每个实例指定不同的lineColorfillColor。由于Circle继承自PsychoPy visual.Circle类,因此它具有所有功能。对super()的调用实际上初始化了父类。参见例如有关super()功能的更多信息,请this post

让我们开始工作。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from psychopy import core, visual, monitors
import psychopy.visual.circle


class Circle(psychopy.visual.circle.Circle):
    def __init__(self, win, lineColor='black', fillColor='red'):
        super(Circle, self).__init__(
            win=win, lineColor=lineColor, fillColor=fillColor, units='deg',
            pos=(1,1), radius=1)


def main():
    # Create a temporary monitor configuration.
    monitor = monitors.Monitor('test_display')
    monitor.setWidth(60)
    monitor.setDistance(80)
    monitor.setSizePix((1440, 900))

    win = visual.Window(monitor=monitor)

    colors = ('red', 'green', 'blue')
    circles = [Circle(win=win, fillColor=color) for color in colors]

    for circle in circles:
        circle.draw()
        win.flip()
        core.wait(1)

    core.quit()


if __name__ == '__main__':
    main()

此代码将创建三个具有不同颜色的Circle,并逐个显示它们。我必须创建一个临时的监视器配置,否则PsychoPy会拒绝在我当前的计算机上打开Window

答案 1 :(得分:0)

您可以更改类的构造函数(__init__方法),添加属性color,并在fillColor中将值更改为变量color。有了这个职位,你也可以这样做。