2014-12-03 108 views
0
def redCircles(): 
    win = GraphWin("Patch2" ,100,100) 
    for x in (10, 30, 50, 70, 90): 
     for y in (10, 30, 50, 70, 90): 
      c = Circle(Point(x,y), 10) 
      c.setFill("red") 
      c.draw(win) 

這是我的代碼和輸出應該是這樣的:我怎樣才能讓我的圈子變成白色?

enter image description here

+0

而不是使用'Circle'的,創建兩個'Polygon'對象每個代表半圈,並填寫一個紅色和其他與白。或者,您可以用紅色填充整個「圓形」,然後創建一個白色的「多邊形」對象,表示您想要填充白色的一半。 – martineau 2014-12-03 15:24:47

+0

@martineau這是一個任務,[這裏是最近的一個上一個問題](http://stackoverflow.com/q/27137304/2749397) – gboffi 2014-12-03 15:29:15

+0

@gboffi,我應該刪除我的答案嗎?我剛剛看到您的評論。 – 2014-12-03 15:31:50

回答

1

只是測試這一點,它爲我工作。

from graphics import * 

def redCircles(): 
    win = GraphWin("Patch2" ,100,100) 
    for x in (10, 30, 50, 70, 90): 
     for y in (10, 30, 50, 70, 90): 
      c = Circle(Point(x,y), 10) 
      d = Circle(Point(x,y), 10) 
      if x in (30, 70): 
       r = Rectangle(Point(x - 10, y), Point(x + 10, y + 10))     
      else: 
       r = Rectangle(Point(x - 10, y- 10), Point(x, y + 10)) 
      c.setFill("red") 
      d.setOutline("red") 
      r.setFill("white") 
      r.setOutline('white') 
      c.draw(win) 
      r.draw(win) 
      d.draw(win) 

if __name__=='__main__': 
    redCircles() 

我們繪製實心圓,然後繪製其中一半以上的矩形,然後勾勒圓形以獲得輪廓。 if檢查我們所在的列。

+0

謝謝你,我已經在python(y) – 2014-12-03 19:24:29

0

以下是我對@ JaredWindover解決方案進行修改後的(臃腫)返工。首先,利用Zelle的clone()方法,在嵌套循環之前完成儘可能多的圖形對象設置。其次,它修復了一個小問題,很難在小圓圈中看到,其中一半的輪廓是黑色而不是紅色。最後,與Jared的解決方案和OP的代碼,它是可擴展的:

from graphics import * 

RADIUS = 25 

def redCircles(win): 
    outline_template = Circle(Point(0, 0), RADIUS) 
    outline_template.setOutline('red') 

    fill_template = outline_template.clone() 
    fill_template.setFill('red') 

    horizontal_template = Rectangle(Point(0, 0), Point(RADIUS * 2, RADIUS)) 
    horizontal_template.setFill('white') 
    horizontal_template.setOutline('white') 

    vertical_template = Rectangle(Point(0, 0), Point(RADIUS, RADIUS * 2)) 
    vertical_template.setFill('white') 
    vertical_template.setOutline('white') 

    for parity, x in enumerate(range(RADIUS, RADIUS * 10, RADIUS * 2)): 

     for y in range(RADIUS, RADIUS * 10, RADIUS * 2): 

      fill = fill_template.clone() 
      fill.move(x, y) 
      fill.draw(win) 

      if parity % 2 == 1: 
       rectangle = horizontal_template.clone() 
       rectangle.move(x - RADIUS, y) 
      else: 
       rectangle = vertical_template.clone() 
       rectangle.move(x - RADIUS, y - RADIUS) 

      rectangle.draw(win) 

      outline = outline_template.clone() 
      outline.move(x, y) 
      outline.draw(win) 

if __name__ == '__main__': 
    win = GraphWin('Patch2', RADIUS * 10, RADIUS * 10) 

    redCircles(win) 

    win.getMouse() 
    win.close()