turtle是Python中的一個標準庫(所以我們不需要另外安裝哈),可以非常方面的進行基礎圖形的繪製,我們可以用它畫櫻花、畫迷宮等很多有意思的圖形,接下來我們就看看吧!
OK,廢話不多說,我們今天就拿美國隊長的盾牌入個門,爲啥是它呢?因爲簡單唄,只有兩個基礎圖形操作,基本繪圖操作它都涉及了,不盤他盤誰。。。
在開始之前,我們先來分析一下,在我們實際生活中,我們畫畫需要用到什麼東西?
畫筆和紙呀,這不是廢話嘛!沒錯,我們實際生活中要筆和紙進行繪圖,那麼在turtle中也是如此,我們接下來就看看turtle的筆和紙。
import turtle # 導入turtle庫
turtle.setup(1000,1000,100,100) # 設置畫布大小
turtle.setup(寬像素,高像素,橫座標位置,縱座標位置)
turtle.mainloop() # 保持畫布一直存在
相信學過tkinter的同學對這幾行語句應該不陌生,特別是最後一句,是一毛一樣;恕我這裏沒有找到直接源碼,不然我們對照庫源碼會比較容易理解!
現在我們有了紙,那麼筆要怎麼設置呢?
我們可以看在在畫布的正中間出現了一個紅色的箭頭,那麼這個就是我們畫筆的初始形態,這裏我們看不出畫筆的粗細,那麼我們畫一條線來看一下:
import turtle
turtle.setup(500,500,500,100)
turtle.pensize(5) # 設置畫筆的粗細爲5像素
turtle.color('red','red') # 設置畫筆的前景色爲紅色,背景色也爲紅色
# 這裏是什麼意思呢?前景色就好比是我們的勾線,背景色就是我們填充的顏色
turtle.forward(100) # 朝畫筆的方向畫100像素的線段
turtle.mainloop()
好了,現在畫布和畫筆都有了,我們就可以愉快的來畫畫了,我們先來看一下這盾牌是長啥樣的:
我們可以看到,這玩意就是由四個圓和一個五角星構成的,四個圓大小不一,五角星在正中間;實際生活中畫畫,肯定是先畫輪廓,然後再填充顏色,但是這裏我們不是的,我們畫一個填充一個,一層一層覆蓋上去:
那麼廢話我們不多說,四個圓先走起:
我們之前也說了,畫筆默認是在畫布的正中央,這玩意轉了一圈又回來了,我要是想再畫一個小圓,那得挪位置呀!
畫布正中央就是座標(0,0),我們可以用turtle.goto(x,y),改變畫筆位置!
import turtle
import time
turtle.setup(1000,1000,500,100)
turtle.pensize(5)
turtle.color('red','red')
turtle.begin_fill() # 開始填充顏色
turtle.circle(200) # 繪製一個半徑爲200的圓
turtle.end_fill() # 填充顏色完畢
turtle.goto(0,50) # 將畫筆移動到(0,50)的位置,即向上移動了50個像素點
turtle.color('white','white')
turtle.begin_fill()
turtle.circle(150)
turtle.end_fill()
turtle.mainloop()
你不會準備一個圓寫5行代碼吧,這樣的代碼太冗餘了,聰明的同學應該早就封裝方法,到時候我們只需要告訴它參數就好了:
def circle(x,y,r,color):
turtle.goto(x,y)
turtle.color(color,color)
turtle.begin_fill()
turtle.circle(r)
turtle.end_fill()
circle(0,0,200,'red')
circle(0,50,150,'white')
circle(0,100,100,'red')
circle(0,150,50,'blue')
現在我們已經把四個圓畫好了,就差點亮小星星了,先別急,turtle中可沒有直接繪製星形的方法哦!我們不妨回憶一下,我們生活中繪製五角星是怎麼畫的:
沒錯,其實就是五條線閉合起來就是五角星了,這裏的難點是,五角星的每個角應該是多少度呢?
我們一步一步來看,首先五角星的正中間是個正五邊形,那麼每個角的度數就是(180*3/5=)108度,那麼平角是180度,就可以得出相鄰角是72度,等腰三角形底角相同,就可以得出五角星的每個角應該就是36度啦。
那麼,現在我們已經知道角度了,我們就可以來畫五角星了:
但是怎麼旋轉畫筆呢?用turtle.right(角度)就可以了,這個方法的實際意思是順時針旋轉畫筆;
def wjx(x,y,l,color):
turtle.goto(x,y)
turtle.color(color, color)
turtle.begin_fill()
for i in range(5):
turtle.forward(l)
turtle.right(144) # 這裏是不是很奇怪,我們不是算出是36嘛,這裏怎麼是144呢?
# 這裏不做解釋,太傻,自己體會
turtle.end_fill()
wjx(0,0,100,"white")
現在我們萬事俱備只欠東風了,是不是小星星不好放呀,我也是找了好久的位置的:
import turtle
turtle.setup(1000,1000)
def circle(x,y,r,color):
turtle.goto(x,y)
turtle.color(color,color)
turtle.begin_fill()
turtle.circle(r)
turtle.end_fill()
circle(0,0,200,'red')
circle(0,50,150,'white')
circle(0,100,100,'red')
circle(0,150,50,'blue')
def wjx(x,y,l,color):
turtle.goto(x,y)
turtle.color(color, color)
turtle.begin_fill()
for i in range(5):
turtle.forward(l)
turtle.right(144)
turtle.end_fill()
wjx(-48,216,95,"white")
turtle.mainloop()