python中的画布背景设置_教你用python画图—Turtle详细教程
Turtle模塊絕對是吸引非專業(yè)代碼開發(fā)者人員學(xué)習(xí)python入門的好工具
通過turtle幾行代碼的執(zhí)行軟件就會(huì)畫出漂亮的圖形,美觀而且有成就感,這樣一下子對python編程就產(chǎn)生了興趣。
這些漂亮的圖形如三角形、五角星、機(jī)器貓等。在寫代碼的時(shí)候改變幾個(gè)參數(shù),就可以產(chǎn)生新的奇形怪狀。下面我就以玩轉(zhuǎn)Turtle為題進(jìn)入本篇的介紹。
/??什么是Turtle?/
Turtle英譯過來為烏龜,不過我們介紹的不是這種動(dòng)物,而是以此命名的一個(gè)繪圖軟件。在python文檔中介紹了Turtle本身是一款簡單、易上手的繪圖軟件,非常適合新手進(jìn)入編程的世界。
該軟件由Wally Feurzeig, Seymour Papert and Cynthia Solomon等在1967年使用最原始的Logo編程語言開發(fā)而成。python語言出現(xiàn)后,有開發(fā)者使用python對其進(jìn)行了重寫,變成了Python內(nèi)置的一個(gè)模塊。
隨著python語言的大熱,Turtle模塊也成為了python語言簡單好用的一個(gè)代名詞,或者說一個(gè)很好的宣講案例。在Python中,使用turtle模塊的幾行代碼、改變幾個(gè)參數(shù)就能繪出漂亮的圖形,如果再增加一些參數(shù),還能繪制出如笑臉、哆啦A夢、表情包等創(chuàng)意十足的圖像,令人驚嘆。
在學(xué)著繪圖時(shí),就會(huì)逐步學(xué)習(xí)python的一些基本語法、函數(shù)、模塊、類和對象等基礎(chǔ)知識;邊玩邊學(xué)四字成語非常恰當(dāng)?shù)拿枋隽送孓D(zhuǎn)turtle模塊的境界,也非常適宜于少兒或者初學(xué)者進(jìn)入Python的世界。
/??怎么玩轉(zhuǎn)Turtle?/
當(dāng)然在這里需要進(jìn)入python編程環(huán)境,可以直接使用IDLE新建一個(gè)python文件,命名為turtle1.py。然后在這個(gè)python文件中就可以開始動(dòng)手寫有關(guān)turtle的代碼。
Turtle是python安裝時(shí)自帶的內(nèi)置模塊,調(diào)用該模塊非常簡單,直接使用import方式加載:
import turtle這也是程序的第一行代碼,用于準(zhǔn)備好使用turtle這個(gè)模塊。
(1)基本動(dòng)作和轉(zhuǎn)向
然后就可以開始學(xué)步了。首先從走開始,讓烏龜往前走100步,就在第一行代碼結(jié)束后在第二行代碼處寫入:
turtle.forward(100)這里forward就是往前走的方法,括號里的100為設(shè)定的步伐參數(shù)。
此時(shí)如果運(yùn)行該程序,就可以看到一張畫布彈出來,該畫布左上角有Python Turtle Graphics標(biāo)題和LOGO,在畫布的中部黑三角箭頭正按照較快的速度往前挪,很快到達(dá)100步那個(gè)位置。
前進(jìn)的過程就像一支黑色的筆在畫布上按照設(shè)定方式在畫畫,筆頭安裝了一個(gè)黑色箭頭用于指示方向,非常生動(dòng)有趣。如下圖:
而此時(shí)代碼看起來是這樣的:
如果想往前走300步,直接修改那個(gè)100為新的300即可。
即對于forward(參數(shù))方法,括號里的參數(shù)是可以修改的,這在python程序里forward就是一個(gè)公用函數(shù),其中的參數(shù)為變量,即值可以改變的參數(shù)。控制了這個(gè)參數(shù),就可以控制前進(jìn)的距離。
如果想回撤,那么就可以使用烏龜?shù)腷ackward方法。如在上述代碼第三行加入回撤50步的代碼,如下:
import turtleturtle.forward(100)turtle.backward(50)保存新的文件同時(shí)運(yùn)行,可以看到畫布上畫筆的黑三角箭頭保持方向不變,但倒著往回50步。如圖:
上述forward和backward就是前進(jìn)和后退的方法,兩種方法都有括號,在括號里可以設(shè)定前進(jìn)或后退的步伐(這里一步為畫布上的一個(gè)像素點(diǎn))。
只有前進(jìn)和后退顯然有點(diǎn)單調(diào),我們需要還可以轉(zhuǎn)彎。此時(shí)就需要使用turtle的轉(zhuǎn)向方法,左轉(zhuǎn)為left,右轉(zhuǎn)為right,如下我們在前述代碼基礎(chǔ)上增加左轉(zhuǎn)方法,并設(shè)定角度為90度,然后繼續(xù)往前100步。
import turtleturtle.forward(100)turtle.backward(50)turtle.left(90)turtle.forward(100)運(yùn)行程序后,畫布上畫筆先是筆頭左轉(zhuǎn)了90度方向,變成了向上,然后沿著向上的方法畫出了長度為100像素的一條線,此時(shí)圖形變成了一個(gè)倒丁字形狀:
上述代碼中l(wèi)eft方法與forward方法一樣,括號里的參數(shù)也可以隨意設(shè)定,比如將left方法里的90度修改為45度:
import turtleturtle.forward(100)turtle.backward(50)turtle.left(45)turtle.forward(100)再運(yùn)行程序,此時(shí)圖形就變?yōu)橐粋€(gè)鈍角形狀:
由此看來,改變left方法里的角度參數(shù),畫筆就可以繪制出不同形狀的圖形。
與左轉(zhuǎn)left方法使用方法一致,右轉(zhuǎn)right方法用于向右轉(zhuǎn),其中right(角度)中的角度參數(shù)也可以根據(jù)需要來設(shè)置。例如在上述左轉(zhuǎn)前行的基礎(chǔ)上,設(shè)定右轉(zhuǎn)90度,然后前行100步:
import turtleturtle.forward(100)turtle.backward(50)turtle.left(45)turtle.forward(100)turtle.right(90)turtle.forward(100)運(yùn)行代碼時(shí),繪制圖形效果如下:
接下來可以思考一下,如果在上述基礎(chǔ)上將右側(cè)下部開口的三角形狀進(jìn)行封閉,也就是形成一個(gè)完整的三角形呢?
很顯然,此時(shí)需要?jiǎng)幽X筋稍微計(jì)算一下。首先箭頭需要右轉(zhuǎn)135度,然后再前行100步:
import turtleturtle.forward(100)turtle.backward(50)turtle.left(45)turtle.forward(100)turtle.right(90)turtle.forward(100)turtle.right(135)turtle.forward(100)再次運(yùn)行程序,畫筆先在原有位置順時(shí)針方向旋轉(zhuǎn)135度,筆頭方向正好朝西,然后開始畫一個(gè)長為100像素的直線,就得到一個(gè)右側(cè)封閉的三角形,如下:
到這里我們小結(jié)一下,使用turtle繪圖的基本動(dòng)作方法包括:forward(前進(jìn)參數(shù))、backward(后退參數(shù))、left(左轉(zhuǎn)角度)、right(右轉(zhuǎn)角度)。turtle是烏龜繪圖模塊名,該模塊中內(nèi)置了這些動(dòng)作方法,因此在使用的時(shí)候直接調(diào)用并給定相應(yīng)參數(shù)即可。簡單理解,turtle就是那支畫筆,這些基本動(dòng)作方法就用于控制畫筆的畫畫方式。用python的面向?qū)ο蟾拍顏砝斫?#xff0c;這些方法屬于turtle這個(gè)繪圖對象,調(diào)用時(shí)使用了“.”運(yùn)算符,其格式為turtle.方法名(參數(shù))。turtle這個(gè)繪圖對象還有很多類似方法,使用格式均為turtle.方法名(參數(shù))。
(2)設(shè)置畫布和畫筆顏色
試想我們是否可以設(shè)置一下畫布和畫筆的顏色呢?肯定是可以的,調(diào)用畫筆的bgcolor方法就可以設(shè)置畫布背景顏色,格式為:turtle.bgcolor(顏色參數(shù));調(diào)用其color方法就可以設(shè)置畫筆顏色,格式為turtle.color(顏色參數(shù))。這里的顏色參數(shù)直接給常見的顏色,如red、white、yellow、purple,使用的時(shí)候加單引號;也可以給RGB顏色代碼,如255,255,255為白色,0,0,0為黑色。需要說明的是,設(shè)置畫布背景顏色一般會(huì)放置在程序開始部分,而畫筆顏色可以在需要的地方設(shè)置即可。如將上述繪制三角形的代碼修改一下,增加畫布背景和畫筆顏色:
import turtleturtle.bgcolor('black')turtle.color('yellow')turtle.forward(100)turtle.backward(50)turtle.left(45)turtle.color('white')turtle.forward(100)turtle.right(90)turtle.forward(100)turtle.color('red')turtle.right(135)turtle.forward(100)運(yùn)行代碼,此時(shí)畫布變?yōu)榱撕谏?#xff0c;畫筆先為黃色,然后為白色,最后為紅色,效果如下:
上面我們通過控制turtle畫筆的動(dòng)作和轉(zhuǎn)向角度,畫出了一個(gè)三角形。想想心里是不是已經(jīng)有了小小的成就感了?看來用turtle軟件畫畫還是比較簡單的。
(3)for循環(huán)語句控制重復(fù)動(dòng)作
下面我們來在畫布上畫一個(gè)正方形。如何設(shè)計(jì)呢?首先來分析一下,我們知道正方形每條邊長度相同,邊與邊的夾角為90度。因此可以先往前移動(dòng)一個(gè)距離d,然后左轉(zhuǎn)90度,轉(zhuǎn)向后繼續(xù)往前移動(dòng)距離d,再左轉(zhuǎn)90度,繼續(xù)移動(dòng)距離d,再來一次左轉(zhuǎn)90度,移動(dòng)距離d,這樣起點(diǎn)和終點(diǎn)就重合了,也就畫出了一個(gè)完整的正方形。我們來看代碼:
import turtleturtle.bgcolor('black')
turtle.color('yellow')
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
執(zhí)行后,畫筆就在畫布上畫出了一個(gè)正方形:
仔細(xì)觀察代碼,可以發(fā)現(xiàn)如果把turtle.forward(100)、turtle.left(90)這兩行語句作為一個(gè)動(dòng)作組合的話,整個(gè)代碼中一共重復(fù)了四次,這種重復(fù)動(dòng)作寫在代碼中還是有點(diǎn)冗長的,試想如果重復(fù)100次這個(gè)組合動(dòng)作,那就得將這個(gè)組合動(dòng)作代碼重復(fù)編寫100次,這樣做肯定不科學(xué)。如何簡化這種重復(fù)執(zhí)行動(dòng)作組合呢?python中提供了控制循環(huán)的for語句,專門用于解決這類重復(fù)性問題。我們先來修改一下畫正方形的代碼:
import turtleturtle.bgcolor('black')turtle.color('yellow')totalTimes=4 #設(shè)定一共需要重復(fù)的次數(shù)for times in range(totalTimes): #使用for語句對每一次進(jìn)行設(shè)計(jì)相同的動(dòng)作組合 turtle.forward(100) #設(shè)定前移100個(gè)像素點(diǎn) turtle.left(90) #然后左轉(zhuǎn)90度執(zhí)行后效果與上述圖是一樣的。這里代碼就簡化多了,代碼中for語句就用于設(shè)計(jì)循環(huán)語句,其使用方法為:
for times in range(totalTimes): #這里寫需要重復(fù)的代碼塊。上述畫四邊形時(shí),相同動(dòng)作組合重復(fù)了4次,動(dòng)作組合中轉(zhuǎn)向角度為90度,兩個(gè)數(shù)字相乘正好為360度,從角度來說就是從起始點(diǎn)出發(fā)旋轉(zhuǎn)一周回到原點(diǎn),也恰好構(gòu)成一個(gè)封閉的圖形。
如果還想畫一個(gè)封閉的五邊形,就可以設(shè)計(jì)動(dòng)作組合中轉(zhuǎn)向角度為72度,重復(fù)次數(shù)為5次;如果畫一個(gè)封閉的六邊形,設(shè)計(jì)轉(zhuǎn)向角度為60度,重復(fù)次數(shù)為6次即可。如下設(shè)計(jì)在畫布上先畫五邊形,然后畫六邊形的代碼:
import turtleturtle.bgcolor('black')turtle.color('yellow')#先畫6邊形totalTimes=6for times in range(totalTimes): turtle.forward(100) turtle.left(60)#然后左轉(zhuǎn)向150度,并往前移動(dòng)50個(gè)像素點(diǎn)turtle.left(150)turtle.forward(50)#最后畫5邊形totalTimes=5for times in range(totalTimes): turtle.forward(100) turtle.left(72)執(zhí)行上述代碼,在畫布上畫出的效果是這樣的:
這樣是不是就可以畫一個(gè)圓呢?只要將畫筆移動(dòng)的距離設(shè)置短一些,如設(shè)置為2,轉(zhuǎn)向設(shè)置也為2,那重復(fù)次數(shù)就必須設(shè)置為180,由此就可以畫出一個(gè)妥妥的圓了。代碼如下:
import turtleturtle.bgcolor('black')turtle.color('yellow')#畫圓totalTimes=180for times in range(totalTimes): turtle.forward(2) turtle.left(2)執(zhí)行后效果如下:
不過在turtle軟件中已經(jīng)內(nèi)置好了畫圓的方法,就是使用turtle.circle(半徑參數(shù)),給定半徑參數(shù)就能完成圓的繪制。如下代碼:
import turtleturtle.bgcolor('black')turtle.color('yellow')#畫一個(gè)半徑為100的圓turtle.circle(100)(4)設(shè)置坐標(biāo)和畫筆位置
到現(xiàn)在為止,我們已經(jīng)掌握了畫基本圖形的方法。不過仔細(xì)觀察的話也可以發(fā)現(xiàn)每次畫畫時(shí)畫筆總是從畫布的中心出發(fā),因?yàn)檫@是turtle模塊設(shè)置好了的,默認(rèn)從中心點(diǎn)出發(fā)。
如果使用二維坐標(biāo)來表示的話,畫布的中心位置坐標(biāo)為(0,0),即縱橫坐標(biāo)均為0。
我們也可以使用turtle模塊的setpos方法修改其位置,如turtle.setpos(10,10)就是設(shè)置畫筆縱坐標(biāo)為10,橫坐標(biāo)也為10;如若設(shè)置為turtle.setpos(10,10),就是設(shè)置畫筆橫坐標(biāo)為10,也就是中心點(diǎn)往右10個(gè)像素點(diǎn),然后再往上10個(gè)像素點(diǎn)。
如果用數(shù)學(xué)角度來說明的話,新的起始點(diǎn)就在中心點(diǎn)右偏上45度,距離為d=(10*10+10*10)的平方根。
我們來試一下:
import turtleturtle.bgcolor('black')turtle.color('yellow')#畫筆默認(rèn)在畫布的中心位置,坐標(biāo)為(0,0)#設(shè)置畫筆的位置挪到縱橫坐標(biāo)均為10像素的位置,即中心點(diǎn)往右45度方向turtle.setpos(10,10) #開始畫圓,畫一個(gè)半徑為100像素的圓turtle.circle(100)運(yùn)行程序后,畫筆先從中心位置挪到指定位置(10,10),然后開始畫圓,效果圖如下:
這個(gè)圓畫的不漂亮,起始點(diǎn)貌似有個(gè)尾巴,這是畫筆最開始從中心位置挪到設(shè)定位置時(shí)畫筆移動(dòng)的痕跡。
如何去除這個(gè)痕跡呢?
我們可以這樣做:使用turtle提供的提筆方法penup( ),也就是先從中心點(diǎn)將畫筆提起來,畫筆在空中挪至設(shè)定位置,然后到了設(shè)定位置再將畫筆落到畫布上,此時(shí)就使用落筆方法turtle.pendown( ),這樣我們修改上述代碼如下:
import turtleturtle.bgcolor('black')turtle.color('yellow')#提起畫筆turtle.penup()#設(shè)置畫筆的位置挪到縱橫坐標(biāo)均為10像素的位置,即中心點(diǎn)往右45度方向turtle.setpos(10,10)#落下畫筆turtle.pendown()#開始畫圓,畫一個(gè)半徑為100像素的圓turtle.circle(30)再來執(zhí)行代碼,那個(gè)多余的尾巴就沒有了。
同時(shí)如果想畫圖結(jié)束時(shí)那個(gè)畫筆不顯示,可以使用hideturtle方法,即隱藏畫筆。
由此可以得到啟發(fā),使用提筆落筆的方法我們就可以在同一個(gè)畫布上畫出很多圖形,當(dāng)然前提是需要計(jì)算好位置。由此設(shè)計(jì)的時(shí)候可以先用筆參考如下坐標(biāo)圖給定位置:
例如我們來畫個(gè)笑臉試試。
import turtleturtle.bgcolor('black')turtle.color('yellow')#先畫笑臉輪廓,畫一個(gè)半徑為100像素的圓turtle.circle(100)#提筆到左上角(-40,120)位置,畫一個(gè)小圓,表示右眼turtle.penup()turtle.setpos(-40,120)turtle.pendown()turtle.circle(10)#提筆到中部位置,先畫一條短線表示上嘴唇turtle.penup()turtle.setpos(-10,60)turtle.pendown()turtle.forward(20)#繼續(xù)下移一定距離,畫一條短弧線表示下嘴唇turtle.penup()turtle.setpos(-10,40)turtle.pendown()totalTimes=4for times in range(totalTimes): turtle.forward(5) turtle.left(10)#提筆到右上角(40,120)位置,畫一個(gè)小圓,表示右眼turtle.penup()turtle.setpos(40,120)turtle.pendown()turtle.circle(10)#隱藏那個(gè)畫筆箭頭turtle.hideturtle()運(yùn)行效果如下圖:
實(shí)話實(shí)說美觀程度一般,不過至少畫出了一個(gè)小人的臉,好像不咋笑。我們使用了turtle.penup()方法,就是提筆,而turtle模塊中本身就自帶了pen方法,也就是畫筆方法,
可以通過pen方法來設(shè)置畫筆的尺寸、顏色,也可以直接使用pencolor、pensize等方法。
具體使用格式為:
turtle.pen(pensize=10,pencolor='red',fillcolor='yellow')或者直接設(shè)定:
turtle.pencolor('red')turtle.pensize(10)如果需要填充顏色,就需要使用turtle的beginfill()和end_fill() 組合,格式為:
turtle.fillcolor("yellow")turtle.begin_fill()turtle.circle(100)turtle.end_fill()我們將這些顏色的設(shè)定加入之前畫的那個(gè)笑臉代碼中:
import turtleturtle.bgcolor('black')turtle.color('yellow')#先畫笑臉輪廓,畫一個(gè)半徑為100像素的圓turtle.fillcolor("yellow")turtle.begin_fill()turtle.circle(100)turtle.end_fill()#提筆到左上角(-40,120)位置,畫一個(gè)小圓,表示右眼turtle.pen(pensize=10,pencolor='red',fillcolor='yellow')turtle.penup()turtle.setpos(-40,120)turtle.pendown()turtle.circle(10)#提筆到中部位置,先畫一條短線表示上嘴唇turtle.penup()turtle.setpos(-10,60)turtle.pendown()turtle.forward(20)#繼續(xù)下移一定距離,畫一條短弧線表示下嘴唇turtle.penup()turtle.setpos(-10,40)turtle.pendown()totalTimes=4for times in range(totalTimes): turtle.forward(5) turtle.left(10)#提筆到右上角(40,120)位置,畫一個(gè)小圓,表示右眼turtle.pen(pensize=10,pencolor='red',fillcolor='yellow')turtle.penup()turtle.setpos(40,120)turtle.pendown()turtle.circle(10)#隱藏那個(gè)畫筆箭頭turtle.hideturtle()再運(yùn)行代碼,就得到效果圖如下:
我們來畫一個(gè)小車,在畫的時(shí)候先需要在紙上稍微設(shè)計(jì)一下車的基本結(jié)構(gòu)參數(shù),如長度和高度等等。示例代碼如下:
import turtleturtle.bgcolor('black')turtle.color('yellow')#先畫后輪子turtle.fillcolor("yellow")turtle.begin_fill()turtle.circle(20)turtle.end_fill()#提筆往前挪,畫前輪turtle.penup()turtle.forward(200)turtle.pendown()turtle.begin_fill()turtle.circle(20)turtle.end_fill()#畫車輪廓turtle.left(90)turtle.forward(50)turtle.right(90)turtle.forward(70)turtle.left(135)turtle.forward(60)turtle.right(45)turtle.forward(2)turtle.left(90)turtle.forward(70)turtle.right(90)turtle.forward(20)turtle.left(90)turtle.forward(160)turtle.left(50)turtle.forward(60)turtle.left(40)turtle.forward(18)turtle.left(90)turtle.forward(240)#畫后輪與車輪廓接觸線turtle.penup()turtle.home()turtle.pendown()turtle.left(90)turtle.forward(50)turtle.write("this car is made by Mr.cao,2019")#車上方寫標(biāo)題turtle.penup()turtle.setpos(60,140)turtle.pendown()turtle.write("豪車!",font=("Times", 18, "bold"))#隱藏那個(gè)畫筆箭頭turtle.hideturtle()運(yùn)行效果如圖:
(5)使用函數(shù)
還想畫別的嗎?只要有足夠的想象力,大部分的圖都可以使用這個(gè)turtle來實(shí)現(xiàn)。那我們在畫的過程中每完成一個(gè)圖形,是否可以將這個(gè)畫圖形的過程包裝起來給個(gè)名字,如果想畫這個(gè)圖形,直接調(diào)用它的名字就可以呢。肯定是可以的,而且還非常方便。python中的函數(shù)就是用來做這個(gè)事情的,其基本格式為:
def 函數(shù)名稱(參數(shù)): #執(zhí)行代碼如果以畫畫為例,函數(shù)名稱就可以命名為畫圖形名稱,這里的參數(shù)是可選項(xiàng),在畫畫過程中如果想采用不同顏色的筆,就可以將筆的顏色作為一個(gè)參數(shù)變量,每次使用這個(gè)函數(shù)時(shí)給定筆的顏色參數(shù),就可以按照自己喜歡的顏色畫畫了。也可以將別的可以變化的參數(shù)作為變量參數(shù)來設(shè)定。
執(zhí)行代碼處就是代碼塊,用于完成整個(gè)圖形繪制的過程。舉個(gè)栗子,我們將前面畫四邊形、五邊形、六邊形等可以包裝成一個(gè)函數(shù),名稱取為drawShape,參數(shù)包括兩個(gè),一個(gè)是totalTimes,總的邊數(shù),一個(gè)是distance,就是畫畫長度,代碼如下:
def drawShape(totalTimes,distance): for time in range(totalTimes): turtle.forward(distance) turtle.left(360/totalTimes)這樣我們想畫這種類似形狀的時(shí)候,只需要調(diào)用這個(gè)函數(shù)名,給定兩個(gè)參數(shù)的值,就可以了。例如:
import turtleturtle.bgcolor('black')turtle.color('yellow')#編寫一個(gè)函數(shù)drawShape,用于畫多邊形def drawShape(totalTimes,distance): for time in range(totalTimes): turtle.forward(distance) turtle.left(360/totalTimes) #調(diào)用這個(gè)函數(shù),來畫一個(gè)五邊形,每邊長度為80個(gè)像素drawShape(5,80)(6)turtle時(shí)鐘和事件響應(yīng)
在turtle中還有動(dòng)作觸發(fā)響應(yīng)事件,也就是通過鼠標(biāo)或鍵盤來控制畫畫開始或結(jié)束,還可以設(shè)置時(shí)鐘,這樣我們就可以畫點(diǎn)動(dòng)畫了,當(dāng)然是較為簡單的。例如我們將上述畫笑臉和畫車兩個(gè)作品放在一個(gè)文件里,先畫笑臉,等待2秒后,再畫出車來,代碼參考如下:
import turtleturtle.bgcolor('black')#定義一個(gè)畫車的函數(shù)def drawCar(): turtle.color('yellow') #先畫后輪子 turtle.fillcolor("yellow") turtle.begin_fill() turtle.circle(20) turtle.end_fill() #提筆往前挪,畫前輪 turtle.penup() turtle.forward(200) turtle.pendown() turtle.begin_fill() turtle.circle(20) turtle.end_fill() #畫車輪廓 turtle.left(90) turtle.forward(50) turtle.right(90) turtle.forward(70) turtle.left(135) turtle.forward(60) turtle.right(45) turtle.forward(2) turtle.left(90) turtle.forward(70) turtle.right(90) turtle.forward(20) turtle.left(90) turtle.forward(160) turtle.left(50) turtle.forward(60) turtle.left(40) turtle.forward(18) turtle.left(90) turtle.forward(240) #畫后輪與車輪廓接觸線 turtle.penup() turtle.home() turtle.pendown() turtle.left(90) turtle.forward(50) turtle.write("this car is made by Mr.cao,2019") #車上方寫標(biāo)題 turtle.penup() turtle.setpos(60,140) turtle.pendown() turtle.write("豪車!",font=("Times", 22, "bold")) #隱藏那個(gè)畫筆箭頭 turtle.hideturtle()#定義個(gè)畫笑臉的函數(shù)def drawFace(): turtle.color('yellow') turtle.speed(0.1) #先畫笑臉輪廓,畫一個(gè)半徑為100像素的圓 turtle.circle(100) #提筆到左上角(-40,120)位置,畫一個(gè)小圓,表示右眼 turtle.penup() turtle.setpos(-40,120) turtle.pendown() turtle.circle(10) #提筆到中部位置,先畫一條短線表示上嘴唇 turtle.penup() turtle.setpos(-10,60) turtle.pendown() turtle.forward(20) #繼續(xù)下移一定距離,畫一條短弧線表示下嘴唇 turtle.penup() turtle.setpos(-10,40) turtle.pendown() totalTimes=4 for times in range(totalTimes): turtle.forward(5) turtle.left(10) #提筆到右上角(40,120)位置,畫一個(gè)小圓,表示右眼 turtle.penup() turtle.setpos(40,120) turtle.pendown() turtle.circle(10) #提示語 turtle.penup() turtle.setpos(-80,-30) turtle.pendown() turtle.write("等待2秒中,準(zhǔn)備帶你去看豪車了哦!",font=32) #隱藏那個(gè)畫筆箭頭 turtle.hideturtle() #先畫笑臉,等待2s后重置畫筆,然后開始畫車turtle.ontimer(drawFace(),t=2000)turtle.reset()turtle.onclick(drawCar())運(yùn)行這個(gè)文件,整個(gè)過程變成了一個(gè)簡單的動(dòng)畫,示例如下:
(7)復(fù)雜繪圖示例
用turtle畫出簡單的圖形容易,如果想畫出復(fù)雜的圖形則有點(diǎn)考驗(yàn)?zāi)托暮退季S過程。網(wǎng)上有很多turtle繪制的復(fù)雜圖形,那代碼就會(huì)大段大段的寫。限于篇幅我們不再一一復(fù)現(xiàn)這些復(fù)雜圖形。
幸好在turtle模塊里就有一些案例,在剛才命名的turtle1.py主菜單里的help菜單就有turtle demo
點(diǎn)擊之后就出來一個(gè)窗口如下:
從左側(cè)的examples可以選擇其中一種案例,窗口左側(cè)為turtle代碼,右側(cè)點(diǎn)擊start可以顯示出對應(yīng)的繪圖效果。
如上述的forest案例,點(diǎn)擊start后繪制出來三棵樹,非常漂亮。這些案例中使用到了python的面向?qū)ο蟆⒑瘮?shù)、隨機(jī)、時(shí)鐘等多種思維和知識,也是python知識的一種綜合應(yīng)用,如果方法和毅力得當(dāng),確實(shí)是提升學(xué)習(xí)和應(yīng)用python的有效手段。
由稻粒兒到稻谷團(tuán)兒 https://zhuanlan.zhihu.com/p/90712358
往期優(yōu)秀文章
親,需要你的“分享”和“在看”
IT入門?感謝關(guān)注 | 程序員題庫→程序員用的單詞表→練習(xí)地址:www.520mg.com/it |
總結(jié)
以上是生活随笔為你收集整理的python中的画布背景设置_教你用python画图—Turtle详细教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ssrf漏洞 php,DokuWiki
- 下一篇: python 通信模块_python 多