Python繪圖庫Turtle詳解(含豐富示例)_第1頁
Python繪圖庫Turtle詳解(含豐富示例)_第2頁
Python繪圖庫Turtle詳解(含豐富示例)_第3頁
Python繪圖庫Turtle詳解(含豐富示例)_第4頁
Python繪圖庫Turtle詳解(含豐富示例)_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Python繪圖庫之Turtle理論與實踐手把手教你學(xué)Python

Turtle庫是Python中自帶的用于繪制圖形、圖像的函數(shù)庫。原理非常簡單:在繪圖窗口的正中間,有一只小海龜,用戶通過一些指令可以控制小海龜在繪圖區(qū)域上移動的方向和距離,記錄小海龜?shù)囊苿榆壽E,即可完成圖形、圖像的繪制。Turtle庫簡介Turtle庫中提供了大量的函數(shù),除了可以控制小海龜?shù)男袨橥?,還可以設(shè)置繪圖區(qū)域的大小、位置,線條的顏色、樣式,填充的位置、顏色等,此外,還提供了一些常見圖形的繪制,如圓、多邊形等。通過Turtle可以繪制下圖所示的一些經(jīng)典效果。Turtle繪圖繪圖窗口大小與位置turtle.setup(width,height,startx,starty):設(shè)置窗體的大小和位置,width為窗體的寬度,height為窗體的高度,既可以是絕對像素,也可以是屏幕的百分比,startx、starty為窗體左上角的位置坐標(biāo),如右圖所示,原點在左上角,水平方向向右為正,垂直方向向下為正;默認時,width=0.5,height=0.75;注意:窗體大小并不是繪圖區(qū)域(畫布)的大小,默認時,畫布的寬度為400像素,高度為300像素,當(dāng)窗體小于畫布時,將會出現(xiàn)滾動條;turtle.screensize(canvwidth,canvheight,bg),設(shè)置畫布的寬度(單位為像素)、高度、背景顏色;turtle.screensize(400,300,bg="red")turtle.setup(0.8,0.8)#屏幕比例

turtle.setup(200,100)#絕對像素位置坐標(biāo)與移動位置坐標(biāo)系如右圖所示,坐標(biāo)原點在正中間,水平向右為正,垂直向上為正,注意與前面屏幕坐標(biāo)系的區(qū)別;位置坐標(biāo)系turtle.setx(坐標(biāo)值):設(shè)置海龜?shù)膞軸坐標(biāo)值,這里是絕對位置,即與海龜之前的坐標(biāo)無關(guān);turtle.sety(坐標(biāo)值):設(shè)置海龜?shù)膟軸坐標(biāo)值,這里是絕對位置,即與海龜之前的坐標(biāo)無關(guān);turtle.goto(x坐標(biāo),y坐標(biāo)):將海龜移動到橫坐標(biāo)為x,縱坐標(biāo)為y的位置,方向保持不變;turtle.home():讓海龜恢復(fù)初始狀態(tài),即位于原點,方向朝右,注意與turtle.goto(0,0)之間的區(qū)別;turtle.forward(距離)(別名:turtle.fd):沿著海龜方向前進指定距離,距離可以為負數(shù),表示后退指定距離,等價于backward()方法;turtle.backward(距離)(別名:turtle.bk):沿著當(dāng)前海龜方向后退指定距離,距離可以為負數(shù),表示前進指定距離,等價于forward()方法;注意:移動海龜或改變海龜?shù)淖鴺?biāo)時,不會改變其方向。方向與角度turtle.setheading(角度)(別名:turtle.seth):設(shè)置海龜前進方向?qū)?yīng)的角度,該角度是絕對的角度值,即與當(dāng)前方向無關(guān)。turtle.right(角度)(別名:turtle.rt):海龜順時針旋轉(zhuǎn)指定角度即右轉(zhuǎn),角度是相對值,相對于當(dāng)前方向;turtle.left(角度)(別名:turtle.lt):海龜逆時針移動指定角度即左轉(zhuǎn),角度是相對值,相對于當(dāng)前方向;turtle.mode(mode=None):設(shè)置模式,并執(zhí)行重置。有兩種模式:“standard”和“l(fā)ogo”,“standard”模式表示初始朝向為右,正角度為逆時針(默認采用該模式),“l(fā)ogo”模式表示初始朝向為上,正角度為順時針。角度坐標(biāo)系方向坐標(biāo)系簡單案例效果觀察不同模式下,前進50,設(shè)置角度為90度,再前進50的效果“l(fā)ogo”模式turtle.mode("logo")

turtle.forward(50)

turtle.setheading(90)

turtle.forward(50)觀察前進50

或前進-50或

后退50

后退-50的效果前進50前進-50后退-50后退50觀察右轉(zhuǎn)90度或右轉(zhuǎn)-90度或左轉(zhuǎn)90度或左轉(zhuǎn)-90度后,前進50的效果右轉(zhuǎn)90度右轉(zhuǎn)-90度左轉(zhuǎn)90度左轉(zhuǎn)-90度默認模式turtle.forward(50)

turtle.setheading(90)

turtle.forward(50)繪制正多邊形繪制邊長為50的正方形思路:沿著當(dāng)前方向前進50,然后右轉(zhuǎn)90度,繼續(xù)前進50,依次類推,總共執(zhí)行4次即可。foriinrange(4):

turtle.forward(50)#前進50

turtle.right(90)#右轉(zhuǎn)90度繪制邊長為50的正三角形思路:沿著當(dāng)前方向前進50,然后左轉(zhuǎn)120度,繼續(xù)前進50,依次類推,總共執(zhí)行3次即可。請動手嘗試繪制邊長為50的正五邊形、正六邊形,并總結(jié)繪制正多邊形的規(guī)律。foriinrange(3):

turtle.forward(50)#前進50

turtle.left(120)#左轉(zhuǎn)120度設(shè)置顏色turtle.colormode():設(shè)置顏色的模式,取值為255整數(shù)或1.0小數(shù),默認為小數(shù)模式,即通過0-1之間的小數(shù)分別表示R、G、B三種顏色,設(shè)置為255整數(shù)模式時,可通過0-255之間的整數(shù)表示R、G、B三種顏色。turtle.color(畫筆色,填充色):同時設(shè)置畫筆顏色和填充色,當(dāng)只傳遞一個參數(shù)時,表示畫筆色和填充色相同;turtle.pencolor(顏色):設(shè)置畫筆顏色;turtle.fillcolor(顏色):設(shè)置填充顏色;默認情況下,畫筆色和填充色都是黑色,在程序執(zhí)行過程中可以多次設(shè)置畫筆色和填充色,顏色設(shè)置后只會影響后續(xù)繪圖效果,不會影響之前的效果。使用turtle繪圖時,離不開顏色的支持,顏色既可以通過一些常見的顏色單詞表示,如red、green、blue等,也可以通過代表RGB三原色的元組表示。在turtle庫中提供了多個方法用于設(shè)置顏色,包括設(shè)置顏色模式、設(shè)置畫筆顏色、設(shè)置填充顏色等。默認為小數(shù)模式turtle.pencolor(0.2,0.8,0.4)使用整數(shù)模式turtle.colormode(255)

turtle.pencolor(60,120,200)turtle.color("red","blue")

turtle.color("red")turtle.color("red","blue")

turtle.pencolor("red")VS下面兩段代碼效果有何區(qū)別?繪制填充區(qū)域turtle.begin_fill():設(shè)置開始填充;turtle.end_fill():設(shè)置填充結(jié)束;繪圖時,經(jīng)常需要會遇到某一塊連續(xù)區(qū)域顏色相同的情況,這時候就需要用到填充。繪制填充時,只需要指定起始位置、結(jié)束位置以及填充顏色。繪制時,如果起點和終點沒有重合,程序會自動將其連接,從而形成封閉區(qū)域。相關(guān)方法如下:為前面的正方形添加填充效果,效果如圖所示。為了看清楚邊框,設(shè)置畫筆粗細為3像素,畫筆顏色為紅色,填充色為藍色。turtle.color(‘red’,‘blue’)

turtle.pensize(3)#設(shè)置畫筆粗細turtle.begin_fill()#開始填充

foriinrange(4):#執(zhí)行

4

次循環(huán)

turtle.fd(50)#向前50

turtle.rt(90)#右轉(zhuǎn)

90度

turtle.end_fill()#結(jié)束填充

turtle.done()#完成繪圖,停留在界面動手試一試,繪制如圖所示五角星效果,畫筆粗細為3像素,邊長為80,畫筆顏色為紅色,填充色為藍色。(提示:只需在正方形填充代碼中修改幾個參數(shù)即可)畫筆的一些設(shè)置在繪圖過程中,經(jīng)常需要對畫筆進行設(shè)置,例如設(shè)置畫筆的粗細、顏色,移動畫筆等,在turtle庫中針對這些操作提供了相應(yīng)的方法。turtle.pensize(畫筆粗細)(別名turtle.width):設(shè)置畫筆粗細,默認為1;turtle.penup()(別名turtle.pu、turtle.up):提起畫筆,此時對畫筆的操作不會在繪圖區(qū)域留下痕跡,常用于從一個新的地方開始繪圖;turtle.pendown()(別名turtle.pd、turtle.down):放下畫筆,此時,對畫筆的操作將會在繪圖區(qū)域留下痕跡;turtle.shape(形狀):用于指定指針的形狀,取值為:‘a(chǎn)rrow’,‘blank’,‘circle’,‘classic’,‘square’,‘triangle’,‘turtle’,默認為classic”;(可通過turtle.getshapes()方法獲?。?/p>

turtle.hideturtle()(別名turtle.ht):隱藏畫筆的指針形狀;turtle.showturtle()(別名turtle.st):顯示畫筆的指針形狀;嘗試實現(xiàn)上圖所示效果,界面上有兩個大小和樣式一樣的五角星,只是位置不同,繪制結(jié)束后不顯示指針。(提示:兩個五角星之間存在一定的間距,需要移動畫筆)繪制不連續(xù)圖形案例turtle.color('red','blue')#設(shè)置畫筆和填充顏色

turtle.pensize(3)#設(shè)置畫筆粗細,單位為像素

turtle.begin_fill()#開始填充

foriinrange(5):#執(zhí)行5次循環(huán),繪制五角星

turtle.fd(80)#向前80

turtle.rt(144)#右轉(zhuǎn)144度

turtle.penup()#提前畫筆

turtle.goto(-100,0)#移動到一個新的位置

turtle.pendown()#放下畫筆

turtle.begin_fill()#開始填充

foriinrange(5):#執(zhí)行5次循環(huán)

turtle.fd(80)#向前200

turtle.rt(144)#右轉(zhuǎn)144度

turtle.end_fill()#結(jié)束填充

turtle.hideturtle()#隱藏指針

turtle.done()#完成繪圖,停留在界面,沒有該方法會直接退出嘗試實現(xiàn)上圖所示效果,界面上有兩個大小和樣式一樣的五角星,只是位置不同,五角星邊長為80,邊框顏色為紅色,填充色為藍色,邊框粗細為3,繪制結(jié)束后不顯示指針。(提示:兩個五角星之間存在一定的間距,需要移動畫筆)關(guān)鍵代碼參考一些基本形狀繪制turtle.dot(直徑,顏色):繪制一個指定直徑和顏色的圓點,不帶邊框。turtle.circle(半徑,extent=角度,steps=內(nèi)切正多邊形邊數(shù)):半徑為正數(shù)時,表示沿當(dāng)前方向逆時針畫圓,半徑為負數(shù)時,表示沿當(dāng)前方向順時針畫圓;指定角度時,則畫弧度,steps參數(shù)用于指定圓內(nèi)切多邊形,當(dāng)為弧度時,多邊形不封閉;turtle.begin_poly():開始記錄多邊形的頂點。當(dāng)前的烏龜位置是多邊形的第一個頂點;turtle.end_poly():停止記錄多邊形的頂點。當(dāng)前的烏龜位置是多邊形的最后一個頂點,將會和開始頂點連接;turtle.get_poly():返回最后記錄的多邊形;turtle.clear():清空turtle窗口,但turtle的位置和狀態(tài)不會改變;turtle.reset():清空窗口,重置turtle狀態(tài)為起始狀態(tài);turtle.undo():撤銷上一個turtle動作;嘗試實現(xiàn)下圖所示效果,繪制多個圓內(nèi)切正多邊形,從三邊形一直到九邊形。圓的半徑為40,繪制完成一個形狀后前進100。turtle.pensize(3)#設(shè)置畫筆寬度為3

turtle.color(‘blue’,‘red’)

turtle.begin_fill()#開始填充

turtle.forward(-400)

foriinrange(3,10):

turtle.circle(40,steps=i)

turtle.forward(100)#前進100像素

turtle.circle(40)#畫圓

turtle.end_fill()#結(jié)束填充海龜

turtle.hideturtle()#隱藏海龜

turtle.done()#結(jié)束,停留在界面上其他一些實用方法turtle.write(文本內(nèi)容,align=“l(fā)eft”,font=(“Arial”,8,“normal”)

):繪制字符串,align參數(shù)用于設(shè)置對其方式,font參數(shù)用于設(shè)置字體,包括字體名稱、字體大小、字體樣式,align參數(shù)和font參數(shù)都有默認值;turtle.position()(別名turtle.pos):返回當(dāng)前的位置距離原點的距離。turtle.speed(速度):設(shè)置畫筆移動速度,取值范圍為[0,10]整數(shù),數(shù)字越大越快;turtle.tracer(False):關(guān)閉動畫,默認會有動畫效果。實現(xiàn)下圖所示效果,在界面上顯示當(dāng)前的時間,并隨時間動態(tài)變化。(提示:時間的格式化,內(nèi)容動態(tài)更新)importturtle

importtime

turtle.pencolor("red")#設(shè)置畫筆顏色

turtle.hideturtle()#隱藏指針

turtle.tracer(False)#關(guān)閉動畫,否則會看到明顯的刷新效果

whileTrue:#死循環(huán)

s_time=time.strftime("%Y-%m-%d%H:%M:%S")#時間格式化字符串

turtle.write(s_time,align="center",font=("Arial",24,"italic"))

#繪制字符串,居中顯示,同時設(shè)置字體大小和樣式

time.sleep(1)#休眠1秒

turtle.clear()#清空已有內(nèi)容

turtle.done()#繪制完成一些經(jīng)典案例效果繪制下圖所示18*18棋盤效果,思路:繪制19條橫線,19條豎線,相鄰橫線、相鄰豎線之間的間隔相同,繪制完一條橫線或豎線后要抬起畫筆,移動到一個新的位置。importturtle

turtle.pensize(2)#設(shè)置畫筆大小

width=15#每個單元格的邊長

turtle.speed("fastest")#設(shè)置畫筆速度

foriinrange(0,19):#循環(huán)畫橫線

turtle.penup()#抬起畫筆

turtle.goto(0,i*width)#調(diào)整位置

turtle.pendown()#按下畫筆

turtle.forward(18*width)#畫線

turtle.left(90)#左轉(zhuǎn)90度

foriinrange(0,19):#循環(huán)畫豎線

turtle.penup()#抬起畫筆

turtle.goto(i*width,0)#調(diào)整位置

turtle.pendown()#按下畫筆

turtle.forward(18*width)#畫線

turtle.hideturtle()#隱藏指針

turtle.done()#繪制完成,停留在界面上一些經(jīng)典案例效果繪制下圖所示太陽花效果,思路:不斷畫等長的線段,然后每次畫完后偏移一定的角度,直到有線段重合。(偏移的角度不同,最終的效果也會不同)importturtle

turtle.color('red','yellow')#設(shè)置畫筆顏色和填充顏色

turtle.begin_fill()#開始填充圖形

turtle.pensize(2)#設(shè)置畫筆大小

turtle.speed("normal")#設(shè)置繪畫速度

whileTrue:#做循環(huán)

turtle.forward(200)#畫筆前進200個像素

turtle.left(170)#左轉(zhuǎn)170度

ifabs(turtle.pos())<1:#判斷畫筆是否回到起點

break

turtle.end_fill()#結(jié)束填充圖形

turtle.hideturtle()#隱藏畫筆指針

turtle.done()#完成繪畫一些經(jīng)典案例效果繪制如圖所示七彩小蛇效果。分析:小蛇的身體扭來扭去主要是通過畫弧度實現(xiàn),這里的半徑和弧度根據(jù)用戶偏好自行設(shè)置。(提示:小蛇身體的粗細通過設(shè)置畫筆粗細實現(xiàn),不需要進行填充)importturtle

turtle.penup()#提起畫筆

turtle.setx(-200)#設(shè)置初始時x的位置

turtle.pendown()#放下畫筆

turtle.pensize(20)#設(shè)置畫筆大小

turtle.right(40)#右轉(zhuǎn)40度

foriinrange(4):#循環(huán)畫身體

turtle.pencolor("red")#畫筆顏色為紅色

turtle.circle(40,80)#畫弧度

turtle.pencolor("green")#畫筆顏色為綠色

turtle.circle(-40,80)#畫弧度

turtle.circle(40,40)#畫弧度

turtle.pencolor("cyan")#畫筆顏色為青色

turtle.forward(40)#前進

turtle.pencolor("black")#畫筆顏色為黑色

turtle.circle(16,180)#畫半圓

turtle.pencolor("purple")#畫筆顏色為紫色

turtle.fd(40/3)#前進

turtle.done()#停留在最后頁面一些經(jīng)典案例效果繪制下方左圖所示心形效果,心形繪制原理如下方右圖圖所示,心形大致由兩條線段以及兩個半圓弧組成,線段的長度剛好為半圓弧的直徑,在繪制過程中注意方向的變化。心形畫法分析圖實際效果圖importturtle

radius=80

turtle.color("red","pink")#設(shè)置畫筆顏色和填充色

turtle.pensize(2)#設(shè)置畫筆大小

turtle.begin_fill()#開始填充

turtle.left(45)#左轉(zhuǎn)45度

turtle.fd(2*radius)#前進

turtle.circle(radius,180)#畫半圓

turtle.right(90)#右轉(zhuǎn)90度

turtle.circle(radius,180)#畫半圓

turtle.fd(2*radius)#前進200像素

turtle.end_fill()#結(jié)束填充

turtle.hideturtle()#隱藏指針

turtle.done()#結(jié)束,停留在當(dāng)前界面思考如何同時繪制多個心形?更多參考代碼關(guān)注微信公眾號:Python資源分享,回復(fù)turtle

即可獲取。一些經(jīng)典案例效果繪制如圖所示陰陽八卦圖效果,分析:該圖主要是由一些圓弧組成,核心是畫圓和圓弧,關(guān)鍵是要把握方向,從效果圖來看,這是一個對稱的圖,所以只要畫出了左半部分,右半部分只要改一下方向和位置即可。左半部分由兩部分組成:黑色填充和白色小圓,黑色填充部分由三部分線條圍成:小圓半圓弧、大圓半圓弧、小圓半圓弧。代碼參考如下。deffill_half(left=1):#繪制半個填充部分

turtle.home()#回到初始狀態(tài)

turtle.begin_fill()#開始填充黑色

turtle.circle(radius/2,180)#畫小半圓

turtle.circle(radius,left*180)#畫大半圓

turtle.circle(radius/2,-180)#畫小半圓

turtle.end_fill()#結(jié)束填充defdraw_small_circle(up=1):#繪制中間的小圓

turtle.home()#回到初始狀態(tài)

turtle.begin_fill()#開始填充黑色

turtle.penup()#抬起畫筆

turtle.sety(up*0.35*radius)#設(shè)置y軸坐標(biāo)

turtle.pendown()#放下畫筆

turtle.circle(up*0.15*radius)#畫圓

turtle.end_fill()#結(jié)束填充

turtle.hideturtle()#隱藏指針radius=200#大圓的半徑

turtle.width(3)#畫筆粗細

turtle.speed("fast")#設(shè)置畫筆速度

turtle.color("black")#畫筆和填充色都為黑色

fill_half(left=1)#繪制左半部分填充

turtle.color("white")#畫筆和填充色都為白色

draw_small_circle(up=1)#繪制左半部分中的圓

turtle.color("black","white")#畫筆和填充色都為黑色

fill_half(left=-1)#繪制下半部分填充

turtle.color("black")#畫筆和填充色都為黑色

draw_small_circle(up=-1)#繪制下半部分中的圓

turtle.done()#繪畫結(jié)束,停留在當(dāng)前界面

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論