前言
第一次來(lái)寫(xiě)博客十分激動(dòng)。:)
最近才開(kāi)始慢慢的學(xué)習(xí)python3,編程一直學(xué)的很爛,不過(guò)也是決定把平時(shí)一些迷惑和解決記錄下來(lái)加深印象,否則大概轉(zhuǎn)頭就忘了。
前兩天粗略學(xué)了turtle畫(huà)圖,本來(lái)對(duì)這麻煩的繪畫(huà)沒(méi)有太大興趣,但是在網(wǎng)上看了一圈發(fā)現(xiàn)就這簡(jiǎn)陋的東西大佬們都可以畫(huà)出超級(jí)好看的圖,遂決定自己也來(lái)畫(huà)一畫(huà)試試。
turtle的基本使用
首先要引入turtle庫(kù) import turtle
但是接下來(lái)函數(shù)都會(huì)需要turtle.xxx,這樣每次都要打一次,很麻煩。
所以我們可以給它import turtle as t重新命名,
或者直接全部引入from turtle import*,這樣的方法之后使用函數(shù)可以不用加前綴,但是當(dāng)里面的某函數(shù)名與其他函數(shù)重名的時(shí)候可能會(huì)出問(wèn)題,所以這種方法通常少用。不過(guò)在這里我們這個(gè)文件只使用turtle所以這個(gè)還是好用的。
(以下指令如果沒(méi)使用from turtle import*需要加上turtle.前綴)
1.畫(huà)布
- screensize(width,height,bg) 里面三個(gè)參數(shù)分別是畫(huà)布寬,高,背景顏色。
例如:screensize(800,600,'green')
如果不填就返回默認(rèn)的大小400*300。 - setup(width,height) 創(chuàng)建畫(huà)布。
- bgcolor(color) 背景顏色。

2.畫(huà)筆
- pensize(size) 或者width(size) 畫(huà)筆的大小。
- pencolor(color) 畫(huà)筆的顏色。同上可以使用已經(jīng)預(yù)置的顏色名稱,也可以自己用RGB調(diào)。
- speed(speed) 畫(huà)筆速度,[0,10]數(shù)字越大越快。
3.繪制
默認(rèn)畫(huà)筆位置是畫(huà)布中心(原點(diǎn)),方向是x軸正方向。
- forward(x) 向前行進(jìn)x距離。簡(jiǎn)寫(xiě)fd。
- backward(x) 向后退x距離。簡(jiǎn)寫(xiě)bk。
- right(angle) 向右轉(zhuǎn)angle角度。簡(jiǎn)寫(xiě)rt。
- left(angle) 向左轉(zhuǎn)angle角度。簡(jiǎn)寫(xiě)lt。(個(gè)人認(rèn)為簡(jiǎn)寫(xiě)了反而很亂||)
- penup() 抬筆,此時(shí)之后操作不會(huì)畫(huà)在畫(huà)布上,只是移動(dòng)畫(huà)筆位置。簡(jiǎn)寫(xiě)pu/up。
- pendown() 落筆,此時(shí)之后操作會(huì)在畫(huà)布上繪制。簡(jiǎn)寫(xiě)pd/down。
- goto(x,y) 移動(dòng)到(x,y)位置。我的疑惑目前還不知道goto之后畫(huà)筆的方向是如何變化,也沒(méi)查到有人說(shuō)這個(gè)問(wèn)題,因此我在使用goto之后會(huì)執(zhí)行一個(gè)forward看一下方向再繼續(xù)寫(xiě)。后面再提這個(gè)問(wèn)題。
- circle(x,angle) 以x為半徑畫(huà)圓/圓弧。此處的半徑是正數(shù)則從畫(huà)筆方向往左開(kāi)始圓弧,負(fù)數(shù)則往右。
下面還有兩個(gè)關(guān)于是否顯示我們的畫(huà)筆箭頭圖標(biāo)的指令。 - hideturtle() 隱藏turtle。
- showturtle() 顯示turtle。
為了美觀我們可以隱藏一下。
4.填色
首先在畫(huà)我們需要填色的圖形前使用
- begin_fill() 表示開(kāi)始填色狀態(tài),不過(guò)此時(shí)并不會(huì)產(chǎn)生變化。
之后我們可以繪制一個(gè)封閉圖形。 - fillcolor(color) 設(shè)置想填充的顏色。
- end_fill() 表示結(jié)束填色狀態(tài),此時(shí)我們的圖形就被填上色了。
最后所有東西都畫(huà)完加上結(jié)束指令
- done()
下面還有幾個(gè)我沒(méi)用到的指令。
- reset() 清空窗口恢復(fù)原始狀態(tài)。
- setheading(angle) 設(shè)置當(dāng)前畫(huà)筆角度為angle。(啊!我要是早看見(jiàn)這條就不用那么費(fèi)勁了)
- write(s,[font=("font-name",font_size,"font_type")]) 文本指令,可以打字并且設(shè)置參數(shù)。s為文本內(nèi)容,font是字體的參數(shù),分別為字體名稱,大小和類型。
還有一些沒(méi)提到的指令,比較少用。
來(lái)畫(huà)一杯橙汁
看到了別人畫(huà)的櫻花樹(shù)、卡通形象等等十分精致,我覺(jué)得我不行。不過(guò)又不想copy別人的代碼回來(lái),還是想自己畫(huà),于是本橙汁愛(ài)好者果然還是要畫(huà)橙汁!
代碼如下:
from turtle import *
setup(800,600)
bgcolor("bisque")
speed(10)
pensize(8)
penup()
'''cup'''
pencolor('lightblue')
goto(-100,-150)
right(30)
pendown()
circle(200,60)
left(60)
forward(250)
left(60)
circle(200,60)
left(120)
circle(200,60)
penup()
goto(-100,100)
pendown()
goto(-100,-150)
'''lemon'''
penup()
pencolor('yellow')
goto(-100,60)
pd()
right(30)
circle(60)
penup()
pensize(4)
goto(-100,70)
pd()
begin_fill()
color('yellow','khaki')
circle(50)
end_fill()
for i in range(4):
circle(50,45)
left(90)
forward(100)
left(90)
penup()
'''juice'''
goto(-100,-150)
begin_fill()
color('orange')
pencolor('lightblue')
right(90)
pd()
forward(130)
pencolor('orange')
circle(-50,180)
circle(50,180)
pencolor('lightblue')
goto(100,-150)
penup()
goto(-100,-150)
right(120)
pendown()
circle(200,60)
end_fill()
pencolor('white')
pensize(10)
penup()
goto(80,30)
pd()
goto(80,-40)
penup()
goto(80,-60)
pd()
goto(80,-65)
hideturtle()
penup()
pencolor('seashell')
goto(0,0)
pd()
goto(80,170)
goto(110,188)
done()
雖然分成了幾個(gè)不同的部分繪制,但順序并不能調(diào)換。
因?yàn)槊恳徊蕉际窃谏弦徊竭M(jìn)行完的位置基礎(chǔ)上進(jìn)行,也涉及到之前那個(gè)goto執(zhí)行完畫(huà)筆的角度未知,可能前序操作不同goto之后的角度也不同。
如果使用剛才看到的那個(gè)設(shè)置畫(huà)筆角度的指令進(jìn)行角度的初始化加上每個(gè)板塊之前都用goto位置初始化,也許可以解決這個(gè)問(wèn)題。
雖然沒(méi)有用到任何高大上的方法,只是很簡(jiǎn)單的畫(huà)圖,我也比較心滿意足了。
在此記錄一下。