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

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