2017-06-05 46 views
1

我做了一個包含圓的類(Psychopy Circle對象)。我想知道如何使用這個類實例化2個圓對象,每個對象都有不同的填充顏色。Python/Psychopy:實例化類中的多個圓對象

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改變它的位置或填充顏色?這是我第一次使用類。目前,如果我在屏幕上繪製'circle'和'cirle2',只需簡單地疊加另一個,因爲一個只是另一個的副本。

乾杯, 喬恩

+0

目前還不清楚你在這裏試圖達到什麼目的。通常,你可以繼承'psychopy.visual.Circle'繼承所有功能。我不明白這個列表,因爲你只是在你的類裏面實例化一個單獨的'psychopy.visual.Circle'。我假設你只是想使用'psychopy.visual.Circle'對象列表? – hoechenberger

+0

是的,我想創建一個psychopy.visual.Circle對象列表,但它們是不同的顏色。 – Jon

回答

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()的調用實際上初始化父類。見例如this post有關super()函數的更多信息。

讓我們把這個工作。

#!/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 s,並逐個顯示它們。我必須創建一個臨時監視器配置,否則PsychoPy會拒絕在我當前的計算機上打開Window

0

可以改變類的添加屬性附加傷害color並在fillColor變化的值給變量color構造(該__init__方法)。有了這個職位,你可以做同樣的事情。

+0

這是什麼樣子?我已經嘗試'self.color = color'在'self.circle ..'下面,但是我沒有定義'全局名'顏色' – Jon

+0

代碼看起來像:class Circle(object): def __init __(self,顏色,posx,posy): self.circle = visual.Circle(win,units ='deg',pos =(posx,posy), radius = 1,lineColor =「black」,fillColor = color) self (自己): [component.draw()for self.components] circle = Circle('red',1,1)#red color at positon(self.ircle) 1,1) circle2 = Circle('blue',2,1)#位置(2,1)處的# – SuperHostile