Python海龜繪圖,繪出最靚麗的景色
大家平時(shí)用程序畫圖的時(shí)候是不是都覺得比較棘手了,今天給大家介紹個(gè)神奇的畫圖模塊-----turtle。它可以通過(guò)一些指令讓畫筆任意移動(dòng),可以說(shuō)是很智能了。
導(dǎo)入模塊
import turtleturtle基本用法
一、設(shè)置畫布大小
要想畫圖就要先有畫布,不然沒(méi)法讓圖顯示,我們可以先設(shè)置畫布大?。?/span>
turtle.screensize(width,height,color) #設(shè)置寬度 高度 顏色二、設(shè)置畫布坐標(biāo)
我們畫圖不光要設(shè)置畫布,還要對(duì)畫布的容器主界面進(jìn)行設(shè)置,不然主界面顯示不了,畫布自然也不會(huì)顯示。
turtle.setup(width,height, startx,starty) #設(shè)置寬度 高度 開始x坐標(biāo) 開始y坐標(biāo)三、顯示主界面
這個(gè)跟tkinter顯示主界面有點(diǎn)相似,也是使用mainloop()方法才可以顯示界面:
import turtleturtle.Screen().title('繪圖工具') #設(shè)置繪圖窗口的標(biāo)題turtle.screensize(400,400, "red") #畫布大小背景顏色turtle.setup(width=600,height=600, startx=300, starty=50) #繪圖窗口的大小和起始坐標(biāo)turtle.mainloop() #顯示主界面t = turtle.Pen() #鋼筆t.shape("turtle") #海龜?shù)男螤睿篴rrow,turtle,circle,square,triangle,classict.resizemode() #大小調(diào)整模式:auto,user,noresizeturtle.bgcolor('black')#背景顏色

四、設(shè)置繪圖畫筆
因?yàn)楹}斃L圖是以畫筆來(lái)進(jìn)行繪畫的,所以我們得生成一個(gè)畫筆來(lái)進(jìn)行畫畫。我們需要對(duì)一個(gè)畫筆的大小和顏色來(lái)進(jìn)行設(shè)置:
turtle.pencolor('green') #設(shè)置畫筆的顏色為綠色,默認(rèn)黑色 color()turtle.pensize(1) #設(shè)置畫筆大小 turtle.width()turtle.speed() #設(shè)置畫筆速度 范圍是[0,10]#也可以使用turtle.Pen()

這樣就生成了我們的第一個(gè)箭頭,海龜繪圖就是通過(guò)這個(gè)箭頭的移動(dòng)軌跡來(lái)達(dá)到繪圖目的的。
五、基本繪圖命令
接下來(lái)我們讓這個(gè)箭頭動(dòng)起來(lái),給他一點(diǎn)靈魂,免得它像稻草人一樣一動(dòng)不動(dòng),說(shuō)干就干。
1.前進(jìn)
turtle.forward(100) #向前進(jìn)100個(gè)像素turtle.fd(100)
2.后退
turtle.backward(200) #向后退200個(gè)像素,下方方法相同turtle.back(200)turtle.bk(200)
3.移動(dòng)到
turtle.goto(100,200) #直接移動(dòng)到坐標(biāo)為(100,200)的位置,下方效果一樣turtle.setpos(100,200)turtle.setposition(100,200)
4.左移
turtle.left(50)#向左移動(dòng)50個(gè)像素turtle.lt(50)
5.右移
turtle.right(60)#向右移動(dòng)60個(gè)像素turtle.rt(60)
6.準(zhǔn)備移動(dòng)
turtle.penup()turtle.Pen().up()
7.暫停移動(dòng)
turtle.pendown()turtle.Pen().down()
8.畫圓
turtle.circle(半徑, 弧度, 內(nèi)置多邊形數(shù))turtle.dot(int)
9.移動(dòng)x軸
turtle.setx(100) #x軸移動(dòng)100個(gè)像素10.移動(dòng)y軸
turtle.sety(100) #y軸移動(dòng)100個(gè)像素11.設(shè)置當(dāng)前朝向的角度
turtle.setheading(90)#當(dāng)前角度為90turtle.seth(90)在standard模式下逆時(shí)針(北方) 它模式下順時(shí)針(東方)
12.設(shè)置當(dāng)前畫筆位置為原點(diǎn)
turtle.home()
我們可以看到海龜最后停留的位置和畫筆最初的落腳點(diǎn)的位置,代碼如下:
import turtleimport timet=turtle.Pen()t.shape('turtle')t.pencolor('green')turtle.bgcolor('gray')t.width=3time.sleep(1)t.penup()#準(zhǔn)備移動(dòng)t.forward(100)#向前進(jìn)100個(gè)像素time.sleep(1)t.backward(200) #向后退200個(gè)像素time.sleep(1)t.goto(100,200) #直接移動(dòng)到坐標(biāo)為(100,200)的位置time.sleep(1)t.left(50)#向左移動(dòng)50個(gè)像素time.sleep(1)t.right(60)#向右移動(dòng)60個(gè)像素time.sleep(1)t.penup()#準(zhǔn)備移動(dòng)t.setx(100)#x軸移動(dòng)100個(gè)像素time.sleep(1)t.sety(100) #y軸移動(dòng)100個(gè)像素turtle.seth(90)turtle.home()turtle.mainloop() #主界面一直保持,不退出
我們也可以將海龜?shù)倪\(yùn)行軌跡顯示出來(lái):

turtle.Screen().title('繪圖工具') #設(shè)置繪圖窗口的標(biāo)題turtle.screensize(400,400, "red") #畫布大小背景顏色turtle.setup(width=600,height=600, startx=300, starty=50) #繪圖窗口的大小和起始坐標(biāo)turtle.pensize(1)turtle.pencolor('green') #畫筆顏色turtle.speed(2)turtle.forward(100) #前進(jìn)100time.sleep(1)turtle.setposition(100,100) #移動(dòng)到位置(100,100)time.sleep(1)turtle.bk(100) #后退100time.sleep(1)turtle.circle(100,100,5) #畫多邊形輪廓time.sleep(1)turtle.dot(50) #畫圓time.sleep(1)turtle.setx(100) #移動(dòng)x軸
13.復(fù)制當(dāng)前圖形
turtle.stamp()14.清除當(dāng)前圖形
turtle.clearstamp()15.清除多個(gè)圖形
turtle.clearstamps()16.撤銷操作
turtle.undo()17.獲取當(dāng)前海龜坐標(biāo)
turtle.position()turtle.pos()
18.獲取海龜當(dāng)前坐標(biāo)與(x,y)的夾角
tutrle.towards(x,y)19.獲取x坐標(biāo)
tutrle.xcor()20.獲取y坐標(biāo)
tutrle.ycor()21.獲取箭頭的朝向
tutrle.heading()22.獲取箭頭坐標(biāo)和設(shè)置的坐標(biāo)的距離
turtle.distance(x,y)23、清空當(dāng)前繪圖窗口,海龜狀態(tài)不變
turtle.clear()turtle.clearscreen()
24.清空窗口,重新設(shè)置海龜狀態(tài)
turtle.reset()turtle.resetscreen()
25.判斷當(dāng)前海龜是否可見
turtle.isvisible()26.寫入文本
turtle.write(text,font)27.繪制填充顏色
turtle.fillcolor('red')28.判斷畫筆是否落下
turtle.isdown (注意:沒(méi)有isup方法)29.隱藏海龜
turtle.hideturtle()turtle.ht()
30.顯示海龜
turtle.showturtle()turtle.st()
31.填充顏色
turtle.fillcolor('black')32.開始填充
turtle.begin_fill()33.結(jié)束填充
turtle.end_fill()34.設(shè)置圓的度數(shù),默認(rèn)值為360度
turtle.degrees(fullcircle=360.0)35.將圓的度數(shù)設(shè)置成2π
turtle.radians()
turtle.Screen().title('繪圖工具') #設(shè)置繪圖窗口的標(biāo)題t=turtle.screensize(400,400, "red") #畫布大小背景顏色turtle.setup(width=600,height=600, startx=300, starty=50) #繪圖窗口的大小和起始坐標(biāo)turtle.pensize(1)turtle.pencolor('green')turtle.speed(2)turtle.forward(100)turtle.circle(40)id=turtle.stamp() #生成idturtle.goto(100,200) #移動(dòng)到(100,200)turtle.clearstamp(id) #刪除idturtle.undo() #撤銷操作print(turtle.pos()) #海龜當(dāng)前坐標(biāo)print(turtle.towards(100,100)) #當(dāng)前坐標(biāo)與設(shè)置的坐標(biāo)的夾角print(turtle.xcor(),turtle.ycor()) #獲取x,y坐標(biāo)print(turtle.heading())#獲取箭頭朝向print(turtle.distance(100,100))#當(dāng)前坐標(biāo)與設(shè)置的坐標(biāo)的距離turtle.clear() #清空繪圖窗口turtle.reset() #重新設(shè)置海龜狀態(tài)turtle.forward(100)#向前進(jìn)100個(gè)像素if turtle.isvisible(): #判斷海龜是否可見,可見則后退300像素turtle.back(300)turtle.write('任性的90后boy')turtle.fillcolor('blue') #海龜?shù)念伾畛錇樗{(lán)色turtle.begin_fill() #開始填充turtle.goto(100,-100)turtle.forward(150)turtle.end_fill() #結(jié)束填充turtle.fillcolor('black') #turtle.begin_fill()turtle.pencolor('yellow')turtle.circle(40)turtle.end_fill()turtle.mainloop()
這一部分主要講海龜?shù)倪\(yùn)行軌跡的變化過(guò)程。
36.海龜?shù)膯?dòng)和停止
turtle.mainloop()turtle.done
37.設(shè)置海龜?shù)哪J?/span>
turtle.mode(mode) standard 逆時(shí)針 它 順時(shí)針 world38.設(shè)置或返回以毫秒為單位的繪圖延遲
turtle.delay(delay=None)39.開始記錄多邊形的第一個(gè)頂點(diǎn)
turtle.begin_poly()40.停止記錄多邊形的最后一個(gè)頂點(diǎn)
turtle.end_poly()41.返回最后記錄的多邊形
turtle.get_poly()
turtle.Screen().title('繪圖工具') #設(shè)置繪圖窗口的標(biāo)題t=turtle.screensize(400,400, "red") #畫布大小背景顏色turtle.setup(width=600,height=600, startx=300, starty=50) #繪圖窗口的大小和起始坐標(biāo)turtle.pensize(1)turtle.pencolor('green')turtle.speed(2)turtle.begin_poly() #開始記錄for i in range(4):turtle.forward(100)turtle.right(90)turtle.end_poly() #結(jié)束記錄print(turtle.get_poly()) #獲取捕獲到的繪圖坐標(biāo)turtle.clear() #清除當(dāng)前繪圖turtle.mode('它')turtle.forward(100)turtle.ht() #隱藏turtle.left(100)turtle.delay(delay=100)#每100毫秒繪制一點(diǎn)turtle.goto(200,50)turtle.st() #顯示turtle.reset()#回到起點(diǎn)time.sleep(1)for x in range(100):for y in range(200):turtle.forward(100)turtle.left(200)turtle.goto(x,y) #不斷移動(dòng)位置if turtle.pos()==(10,10): #如果當(dāng)前位置為(10,10)turtle.done #銷毀窗口turtle.mainloop()

這里顯示了最初繪圖的坐標(biāo),其實(shí)它繪制的是一個(gè)矩形。
總結(jié)
從這里看出,海龜畫圖的確是一個(gè)很不錯(cuò)的模塊,它能十分迅速并且很方便的幫助我們進(jìn)行繪圖,只需要短短幾個(gè)辨識(shí)度比較高的英文進(jìn)行組合便可以繪制精美的圖形。當(dāng)然它還有很多其它的用法,這里不在一一細(xì)說(shuō),大家可以慢慢琢磨。
- EOF -
推薦閱讀:
