- Python程序設(shè)計(jì)
- 張雪萍主編
- 3233字
- 2019-06-19 15:48:24
1.5 繪圖
在Python中有很多編寫圖形程序的方法,一個(gè)簡單的啟動(dòng)圖形化程序設(shè)計(jì)的方法是使用Python 內(nèi)置的turtle 庫。turtle 庫是Python 內(nèi)置的繪制線、圓及其他形狀(包括文本)的圖形庫。
turtle 庫是 Python 的標(biāo)準(zhǔn)庫之一。turtle 庫是一個(gè)簡單但很流行的繪制圖形的函數(shù)庫,它提供了一個(gè)小海龜(一支畫筆),你可以把它理解為一個(gè)海龜機(jī)器人,根據(jù)指令在繪圖窗口中爬行。小海龜初始位于橫軸為 x、縱軸為 y 的坐標(biāo)系原點(diǎn),小海龜最初所在的這個(gè)原點(diǎn)(0,0)在繪圖窗口的正中間(注意:不是計(jì)算機(jī)屏幕窗口左上角的原點(diǎn)),小海龜面向 x 軸的正方向(向右)。在一組函數(shù)指令的控制下,小海龜可以在這個(gè)平面坐標(biāo)系中爬行,爬行所經(jīng)過的軌跡形成了繪制的圖形。
1.5.1 創(chuàng)建turtle對(duì)象
在導(dǎo)入turtle庫時(shí),實(shí)際上就創(chuàng)建了一個(gè)turtle對(duì)象,然后,可以調(diào)用turtle對(duì)象的各種方法來完成不同的圖形繪制。
1.理解Turtle類創(chuàng)建的turtle對(duì)象
當(dāng)通過調(diào)用 turtle 庫的 Turtle 類來創(chuàng)建一個(gè) turtle 對(duì)象時(shí),它的位置被設(shè)定在原點(diǎn)(0,0)處——繪圖窗口的正中心,而且它的方向被設(shè)置為向右,即小海龜面向 x 軸的正方向。

執(zhí)行以上命令后,彈出了繪圖窗口,并且小海龜(畫筆)位于窗口的正中心,畫筆筆尖向右,如圖1-24所示。

圖1-24 小海龜位于窗口的中心

執(zhí)行以上命令,可將小海龜(畫筆筆尖)的顏色變成紅色。
turtle 模塊用畫筆(想象成一只小海龜)來繪制圖形。默認(rèn)情況下,畫筆的筆尖是向下的(就像真實(shí)的筆尖觸碰一張紙一樣)。由于筆尖是向下的,當(dāng)移動(dòng)畫筆的時(shí)候,它就會(huì)繪制出一條從當(dāng)前位置到新位置的線,理解為小海龜從當(dāng)前位置爬行到新位置,爬行經(jīng)過的路徑所留下的痕跡就形成了繪制的圖形。

以上輸出結(jié)果表明,海龜?shù)那斑M(jìn)方向是向右的。
tl.forward(100):小海龜從當(dāng)前的原點(diǎn)(0,0)向右爬行了 100(單位是像素),到達(dá)坐標(biāo)位置(100,0)處,爬行所經(jīng)過的路徑形成了一條直線。
【例1-15】 繪制正方形,其中,兩邊是紅色,兩邊是綠色。
通過調(diào)用 turtle 庫里的 Turtle 類創(chuàng)建一個(gè)繪圖窗口的實(shí)例,接下來的圖形繪制都是在這個(gè)圖形窗口中進(jìn)行的。初始化海龜在原點(diǎn)(0,0)處,即繪圖窗口的正中心,并且注意海龜?shù)男羞M(jìn)方向(或者說畫筆筆尖的方向)設(shè)置為向右。


請(qǐng)運(yùn)行以上程序,注意觀察海龜?shù)倪\(yùn)動(dòng)軌跡。
說明:方向控制方法(left()、right())指的是在海龜當(dāng)前行進(jìn)方向上進(jìn)行左轉(zhuǎn)或右轉(zhuǎn),因此,弄清楚海龜(畫筆筆尖)當(dāng)前的行進(jìn)方向很重要。
2.不使用Turtle類完成圖形的繪制
上面是通過調(diào)用 turtle 庫里的 Turtle 類來創(chuàng)建一個(gè)繪圖窗口的實(shí)例,但是也可以不通過這種方法來完成圖形的繪制,請(qǐng)看下面的代碼。
【例1-16】 繪制正方形,其中兩邊是紅色,兩邊是綠色。

1.5.2 turtle繪圖的基礎(chǔ)知識(shí)
1.設(shè)置繪圖窗體大小
畫布是turtle中用于繪圖的區(qū)域,即turtle的繪圖窗口,可以設(shè)置它的大小和初始位置。turtle的畫布空間中的最小單位是像素。
1)screensize方法

參數(shù)分別為畫布的寬(單位像素)、高及背景顏色,如果省略參數(shù),則將繪制一個(gè)大小為400×300的窗口,并返回當(dāng)前窗口的寬度和高度。
canvwidth——正整數(shù);
canvheight——正整數(shù);
bg——表示繪圖窗口的背景顏色,可用顏色字符串表示,或者用RGB元組表示。
【例1-17】 繪制一個(gè)大小為400×300的窗口,背景顏色為默認(rèn)色白色。

【例 1-18】 繪制一個(gè)大小為 2000×1500 的窗口,背景顏色為白色,此時(shí)窗口會(huì)顯示水平和垂直滾動(dòng)條。

繪圖窗口的繪制也可以用以下方法來完成。
2)setup方法
turtle.setup(width,height,startx=None,starty=None)
設(shè)置繪圖窗口的大小及位置,這里的位置(startx,starty)指的是繪圖窗口左上角相較于計(jì)算機(jī)屏幕窗口(計(jì)算機(jī)屏幕窗口原點(diǎn)在屏幕窗口的左上角)的坐標(biāo)位置(見圖1-25)[8]。

圖1-25 繪圖窗口和計(jì)算機(jī)屏幕的相對(duì)位置
當(dāng)width、height的值為整數(shù)時(shí),表示像素;當(dāng)為小數(shù)時(shí),表示占據(jù)計(jì)算機(jī)屏幕的比例;默認(rèn)width=0.5,height=0.75。
(startx,starty)這一坐標(biāo)表示繪圖窗口左上角頂點(diǎn)的位置,如果為空,則繪圖窗口位于計(jì)算機(jī)屏幕中心。
當(dāng) startx 的值為正數(shù)時(shí),指的是窗口左邊距離計(jì)算機(jī)屏幕左邊的距離;當(dāng)為負(fù)數(shù)時(shí),則表示窗口右邊距離計(jì)算機(jī)屏幕右邊的距離。
當(dāng) starty 的值為正數(shù)時(shí),指的是窗口頂部距離計(jì)算機(jī)屏幕頂部的距離;當(dāng)為負(fù)數(shù)時(shí),則表示窗口底部距離計(jì)算機(jī)屏幕底部的距離。
【例 1-19】 設(shè)置繪圖窗口大小為 200×200 像素,位于計(jì)算機(jī)屏幕左上方(窗口左上角與計(jì)算機(jī)屏幕原點(diǎn)重合)。

【例 1-20】 設(shè)置繪圖窗口的寬度和高度分別是計(jì)算機(jī)屏幕的 75%和 50%,位于計(jì)算機(jī)屏幕正中心。

通過改變startx和starty的值來觀察窗口的變化情況。
2.screensize方法和setup方法的異同點(diǎn)
雖然turtle.screensize()和turtle.setup()都能繪制窗口,但它們有不同之處。
(1)turtle.screensize()可以設(shè)置繪圖窗口的背景顏色,而turtle.setup()不能。
(2)turtle.screensize()繪制窗口時(shí),無論給出的寬度和高度是多少,所繪制的窗口在屏幕上顯示的都為 400×300。超過這個(gè)大小,窗口會(huì)顯示水平和垂直滾動(dòng)條。而turtle.setup()會(huì)根據(jù)給定的寬度、高度值來繪制窗口。
(3)turtle.screensize()所繪制的窗口位于計(jì)算機(jī)屏幕上固定的位置,而 turtle.setup()可以指定它在計(jì)算機(jī)屏幕上的位置。
其實(shí),以上兩個(gè)方法在圖形繪制過程中并不是必需的,請(qǐng)參考1.5.1節(jié)繪制正方形的第2種方法。
1.5.3 利用turtle庫提供的方法繪制圖形
turtle 庫提供了很多方法,通過這些方法可以讓海龜(畫筆)在繪圖窗口中游走,從而完成圖形的繪制。這里主要介紹 3 類方法:畫筆控制方法、運(yùn)動(dòng)控制方法及全局控制方法。更多的方法及使用方式可用“help(turtle)”進(jìn)行查閱,如圖1-26所示。

圖1-26 如何使用help命令
在圖 1-26 界面中,還可以通過按下“Ctrl+F”快捷鍵彈出搜索框進(jìn)行關(guān)鍵字的查閱(見圖1-27)。

圖1-27 按Ctrl+F快捷鍵彈出搜索框
1.turtle畫筆控制方法
通過畫筆控制方法可以設(shè)置畫筆的粗細(xì)和顏色、畫筆筆尖抬起(此時(shí)走過的路徑就不會(huì)形成圖形)、畫筆筆尖放下等,配合運(yùn)動(dòng)控制方法就能畫出我們想要的圖形。turtle畫筆控制方法如表1-4所示。
表1-4 turtle畫筆控制方法

可以通過設(shè)置turtle.color(pencolor,fillcolor)來設(shè)置畫筆顏色和封閉圖形的填充色,第1 個(gè)參數(shù) pencolor 代表畫筆顏色,第 2 個(gè)參數(shù) fillcolor 代表填充色。如果只有 1 個(gè)參數(shù),那就意味著畫筆顏色和填充色都用同一種顏色。
turtle.color(pencolor,fillcolor)更為詳細(xì)的用法可通過help(turtle.color)進(jìn)行查閱。
【例1-21】 繪制一個(gè)紅色三角形及一個(gè)×。

運(yùn)行結(jié)果如圖1-28所示。

圖1-28 運(yùn)行結(jié)果(一)
turtle 庫默認(rèn)采用 RGB 的小數(shù)值來表示顏色,但可通過 turtle.colormode(mode)進(jìn)行模式設(shè)置,即切換使用整數(shù)值來表示顏色。由紅、綠、藍(lán)3種顏色可構(gòu)成我們所看到的任意顏色,RGB指紅、綠、藍(lán)3種顏色通道的組合。常用的RGB顏色值如表1-5所示[8]。
表1-5 常用RGB顏色值

2.turtle運(yùn)動(dòng)控制方法
通過操縱海龜在繪圖窗口中的行進(jìn),可以完成圖形的繪制。控制海龜行進(jìn)的時(shí)候,海龜可以走直線,也可以走曲線。完成這些操作的方法可參見表1-6。
注意:(1)凡是在沒有抬起畫筆筆尖的情況下移動(dòng)畫筆都會(huì)形成圖形。
(2)海龜(畫筆筆尖)后退時(shí),畫筆筆尖方向并不改變(這一點(diǎn)尤其要注意)。
表1-6 畫筆運(yùn)動(dòng)方法

3.turtle全局控制方法
turtle全局控制方法可參見表1-7。
表1-7 turtle全局控制方法

“turtle.write()”方法的作用是將文本寫在當(dāng)前畫筆(海龜)所在位置,同時(shí)可以通過“move”選項(xiàng)來確定文本寫入后畫筆(海龜)是否移動(dòng)位置。每個(gè)參數(shù)的具體含義如下:
s——輸出文本內(nèi)容,也可以輸出多行內(nèi)容,用“'\n'”進(jìn)行換行處理。
move——有兩個(gè)取值,True和False。
move=False為默認(rèn)值。
move=True,則在寫入文本內(nèi)容后,畫筆(海龜)會(huì)移動(dòng)到文本內(nèi)容的右下角處。
move=False,則在寫入文本內(nèi)容后,畫筆(海龜)不會(huì)移動(dòng)位置。
只要帶有 move 參數(shù),輸出的文本內(nèi)容就會(huì)有畫筆走過留下的痕跡,所以,通常不設(shè)置該參數(shù)。
align——有3個(gè)取值,'left'、'right'和'center'。
align='left'為默認(rèn)值。
align='left',文本從畫筆的當(dāng)前位置開始寫,寫完文本內(nèi)容后,畫筆會(huì)移動(dòng)到文本內(nèi)容右下角的最后一個(gè)字后。
align='right',此時(shí)有兩點(diǎn)要注意:①文本最后一個(gè)字的位置為當(dāng)前畫筆所在位置,即系統(tǒng)自動(dòng)根據(jù)文本內(nèi)容多少選擇從何處開始寫,但寫完后的位置為當(dāng)前畫筆所在位置;②無論 move 的值設(shè)定為 True 還是 False,畫筆都不會(huì)移動(dòng),但還是有畫筆走過留下的痕跡。
align='center',文本輸出在當(dāng)前畫筆的中心位置,寫完文本內(nèi)容后,畫筆會(huì)移動(dòng)到文本內(nèi)容右下角的最后一個(gè)字后。
對(duì)于font=(fontname,fontsize,fonttype),fontname和fonttype均為字符串,分別表示輸出字體的名稱和類型,fontsize為字體大小。
fonttype可取'normal','bold','italic','underline',還可以自由組合,如'bold italic'。
fontname可取'Arial'、'Times New Roman'、'宋體'、'楷體'、'黑體'、'微軟雅黑'等。
關(guān)于該方法的更多細(xì)節(jié)也可以通過help(turtle.write)進(jìn)行查閱。
4.示例
【例1-22】 繪制圖文。

運(yùn)行結(jié)果如圖1-29所示。

圖1-29 運(yùn)行結(jié)果(二)
- Learning Neo4j
- Designing Machine Learning Systems with Python
- 自己動(dòng)手寫搜索引擎
- 構(gòu)建移動(dòng)網(wǎng)站與APP:HTML 5移動(dòng)開發(fā)入門與實(shí)戰(zhàn)(跨平臺(tái)移動(dòng)開發(fā)叢書)
- AngularJS Web Application Development Blueprints
- Rust編程從入門到實(shí)戰(zhàn)
- Python Deep Learning
- Hands-On Automation Testing with Java for Beginners
- 用戶體驗(yàn)可視化指南
- Principles of Strategic Data Science
- uni-app跨平臺(tái)開發(fā)與應(yīng)用從入門到實(shí)踐
- SQL Server 2012 數(shù)據(jù)庫應(yīng)用教程(第3版)
- HikariCP數(shù)據(jù)庫連接池實(shí)戰(zhàn)
- Node.js核心技術(shù)教程
- Netty 4核心原理與手寫RPC框架實(shí)戰(zhàn)