版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 Python語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)劉劉衛(wèi)國(guó)衛(wèi)國(guó)第第12章章 圖形圖形繪制繪制配源代碼配源代碼12.1.1 tkinter模塊模塊導(dǎo)導(dǎo)入入tkinter模塊一般采用以下兩種方法。模塊一般采用以下兩種方法。 import tkinter from tkinter import *12.1 Tkinter圖形庫(kù)概述圖形庫(kù)概述12.1.2 主窗口的主窗口的創(chuàng)建創(chuàng)建主主窗口也稱為根窗口,這是一個(gè)頂層窗口,窗口也稱為根窗口,這是一個(gè)頂層窗口,所有圖形都是在這個(gè)窗口中繪制的。其創(chuàng)建格所有圖形都是在這個(gè)窗口中繪制的。其創(chuàng)建格式為:式為:窗口窗口對(duì)象名對(duì)象名=Tk()例如例如,下列語(yǔ)句創(chuàng)建主窗口,下列語(yǔ)句創(chuàng)
2、建主窗口w。 w=Tk()12.1.3 畫布對(duì)象的創(chuàng)建畫布對(duì)象的創(chuàng)建畫布畫布(canvas)就是用來(lái)進(jìn)行繪圖的區(qū)域,)就是用來(lái)進(jìn)行繪圖的區(qū)域,實(shí)際上是一個(gè)對(duì)象,可以在畫布上繪制各種圖形、實(shí)際上是一個(gè)對(duì)象,可以在畫布上繪制各種圖形、標(biāo)注文本。創(chuàng)建畫布對(duì)象語(yǔ)句的格式如下:標(biāo)注文本。創(chuàng)建畫布對(duì)象語(yǔ)句的格式如下:畫布對(duì)象名畫布對(duì)象名=Canvas(窗口對(duì)象名窗口對(duì)象名,屬性名屬性名=屬性屬性值值,)該該語(yǔ)句創(chuàng)建一個(gè)畫布對(duì)象,并對(duì)該對(duì)象的屬語(yǔ)句創(chuàng)建一個(gè)畫布對(duì)象,并對(duì)該對(duì)象的屬性進(jìn)行設(shè)置。語(yǔ)句中的性進(jìn)行設(shè)置。語(yǔ)句中的Canvas代表代表tkinter模塊模塊提供的提供的Canvas類,通過(guò)類,通過(guò)Canv
3、as類的構(gòu)造函數(shù)類的構(gòu)造函數(shù)Canvas()創(chuàng)建畫布對(duì)象。創(chuàng)建畫布對(duì)象?!按翱趯?duì)象名窗口對(duì)象名”表示畫表示畫布所在的布所在的窗口,窗口,“屬性名屬性名=屬性值屬性值”用于設(shè)置畫用于設(shè)置畫布對(duì)象的布對(duì)象的屬性。屬性。下面的語(yǔ)句在主窗口下面的語(yǔ)句在主窗口w中創(chuàng)建一個(gè)寬度為中創(chuàng)建一個(gè)寬度為300像素、高度為像素、高度為200像素、背景為白色的畫布像素、背景為白色的畫布對(duì)象,并將畫布對(duì)象命名為對(duì)象,并將畫布對(duì)象命名為c。 c=Canvas(w,width=300,height=200,bg=white)注意,雖然已經(jīng)創(chuàng)建了畫布對(duì)象注意,雖然已經(jīng)創(chuàng)建了畫布對(duì)象c,但在主,但在主窗口中并沒(méi)有看到這塊白色畫
4、布。為了讓畫布在窗口中并沒(méi)有看到這塊白色畫布。為了讓畫布在窗口中顯現(xiàn)出來(lái),還需要執(zhí)行如下語(yǔ)句。窗口中顯現(xiàn)出來(lái),還需要執(zhí)行如下語(yǔ)句。 c.pack()其中其中c表示畫布對(duì)象,表示畫布對(duì)象,pack()是是畫布對(duì)象的畫布對(duì)象的一個(gè)方法,這時(shí)在屏幕上看到原來(lái)的一個(gè)方法,這時(shí)在屏幕上看到原來(lái)的主窗口中放主窗口中放進(jìn)一個(gè)進(jìn)一個(gè)300200的白色畫布。的白色畫布。12.1.4 畫布對(duì)象的畫布對(duì)象的坐標(biāo)系坐標(biāo)系tkinter模塊為畫布建立了坐標(biāo)系。畫布坐模塊為畫布建立了坐標(biāo)系。畫布坐標(biāo)系以畫布左上角為原點(diǎn),從原點(diǎn)水平向右為標(biāo)系以畫布左上角為原點(diǎn),從原點(diǎn)水平向右為x軸,從原點(diǎn)垂直向下為軸,從原點(diǎn)垂直向下為y軸
5、。軸。畫布坐標(biāo)系畫布坐標(biāo)系12.1.5 畫布中的圖形對(duì)象畫布中的圖形對(duì)象1圖形對(duì)象的標(biāo)識(shí)圖形對(duì)象的標(biāo)識(shí)畫布中的圖形對(duì)象需要采用某種方法來(lái)標(biāo)識(shí)畫布中的圖形對(duì)象需要采用某種方法來(lái)標(biāo)識(shí)和引用,以便對(duì)該圖形對(duì)象進(jìn)行處理,具體采用和引用,以便對(duì)該圖形對(duì)象進(jìn)行處理,具體采用標(biāo)識(shí)號(hào)和標(biāo)簽(標(biāo)識(shí)號(hào)和標(biāo)簽(tag)兩種標(biāo)識(shí)方法。)兩種標(biāo)識(shí)方法。標(biāo)識(shí)號(hào)是創(chuàng)建圖形對(duì)象時(shí)自動(dòng)為圖形對(duì)象賦標(biāo)識(shí)號(hào)是創(chuàng)建圖形對(duì)象時(shí)自動(dòng)為圖形對(duì)象賦予的唯一的整數(shù)編號(hào)。標(biāo)簽相當(dāng)于給圖形對(duì)象命予的唯一的整數(shù)編號(hào)。標(biāo)簽相當(dāng)于給圖形對(duì)象命名,一個(gè)圖形對(duì)象可以與多個(gè)標(biāo)簽相關(guān)聯(lián),而同名,一個(gè)圖形對(duì)象可以與多個(gè)標(biāo)簽相關(guān)聯(lián),而同一個(gè)標(biāo)簽可以與多個(gè)圖形對(duì)象相
6、關(guān)聯(lián),一個(gè)標(biāo)簽可以與多個(gè)圖形對(duì)象相關(guān)聯(lián),即一個(gè)圖即一個(gè)圖形對(duì)象可以有多個(gè)名字,而且不同形對(duì)象可以有多個(gè)名字,而且不同圖形對(duì)象可以圖形對(duì)象可以有相同的名字。有相同的名字。為圖形對(duì)象指定標(biāo)簽有三種方法。為圖形對(duì)象指定標(biāo)簽有三種方法。(1)在創(chuàng)建圖形時(shí)利用)在創(chuàng)建圖形時(shí)利用tags屬性來(lái)指定標(biāo)簽,屬性來(lái)指定標(biāo)簽,可以將可以將tags屬性設(shè)置為單個(gè)字符串,即單個(gè)名屬性設(shè)置為單個(gè)字符串,即單個(gè)名字,也可以設(shè)置為一個(gè)字符串元組,即多個(gè)名字,也可以設(shè)置為一個(gè)字符串元組,即多個(gè)名字。字。(2)在創(chuàng)建圖形之后,可以利用畫布的)在創(chuàng)建圖形之后,可以利用畫布的itemconfig()方法對(duì)方法對(duì)tags屬性進(jìn)行設(shè)置
7、。屬性進(jìn)行設(shè)置。(3)利用畫布的)利用畫布的addtag_withtag()方法來(lái)為圖方法來(lái)為圖形對(duì)象添加新標(biāo)簽。形對(duì)象添加新標(biāo)簽。2圖形對(duì)象的共性操作圖形對(duì)象的共性操作(1)gettags()方法:用于獲取給定圖形對(duì)象的方法:用于獲取給定圖形對(duì)象的所有標(biāo)簽。所有標(biāo)簽。(2)find_withtag()方法:用于獲取與給定標(biāo)簽方法:用于獲取與給定標(biāo)簽相關(guān)聯(lián)的所有圖形對(duì)象。相關(guān)聯(lián)的所有圖形對(duì)象。(3)delete()方法:用于從畫布上刪除指定的方法:用于從畫布上刪除指定的圖形對(duì)象。圖形對(duì)象。(4)move()方法:用于在畫布上移動(dòng)方法:用于在畫布上移動(dòng)指定圖形。指定圖形。繪制繪制圖形前,先要導(dǎo)入
8、圖形前,先要導(dǎo)入tkinter模塊、創(chuàng)建主模塊、創(chuàng)建主窗口、創(chuàng)建畫布并使畫布可見(jiàn)。相關(guān)的語(yǔ)句匯總窗口、創(chuàng)建畫布并使畫布可見(jiàn)。相關(guān)的語(yǔ)句匯總?cè)缦隆H缦?。from tkinter import *w=Tk()c=Canvas(w,width=300,height=200,bg=white)c.pack()12.2 畫布繪圖畫布繪圖12.2.1 繪制矩形繪制矩形1create_rectangle()方法方法畫布畫布對(duì)象提供對(duì)象提供create_rectangle()方法,用方法,用于在畫布上創(chuàng)建矩形,其調(diào)用格式如下:于在畫布上創(chuàng)建矩形,其調(diào)用格式如下:畫布對(duì)象名畫布對(duì)象名.create_rectan
9、gle(x0,y0,x1,y1,屬屬性設(shè)置性設(shè)置)其中其中,(,(x0,y0)是矩形左上角的坐標(biāo),)是矩形左上角的坐標(biāo),(x1,y1)是矩形右下角的坐標(biāo)。屬性設(shè)置即對(duì)矩是矩形右下角的坐標(biāo)。屬性設(shè)置即對(duì)矩形的屬性進(jìn)行設(shè)置。形的屬性進(jìn)行設(shè)置。例如,下面的語(yǔ)句創(chuàng)建一個(gè)以(例如,下面的語(yǔ)句創(chuàng)建一個(gè)以(50,50)為左)為左上角、以(上角、以(200,100)為右下角的矩形。)為右下角的矩形。 c.create_rectangle(50,30,200,150)下面的語(yǔ)句再創(chuàng)建一個(gè)矩形,并將矩形標(biāo)識(shí)號(hào)下面的語(yǔ)句再創(chuàng)建一個(gè)矩形,并將矩形標(biāo)識(shí)號(hào)存入變量存入變量r中。中。 r=c.create_rectangl
10、e(80,70,250,180,tags=Rect2) r22矩形對(duì)象的常用屬性矩形對(duì)象的常用屬性(1)矩形邊框?qū)傩裕┚匦芜吙驅(qū)傩詏utline屬性。矩形邊框可以用屬性。矩形邊框可以用outline屬性來(lái)屬性來(lái)設(shè)置顏色,其默認(rèn)值為黑色。如果將設(shè)置顏色,其默認(rèn)值為黑色。如果將outline設(shè)設(shè)置為空串,則不顯示邊框,即透明的邊框。置為空串,則不顯示邊框,即透明的邊框。width屬性。邊框的寬度可以用屬性。邊框的寬度可以用width屬性來(lái)屬性來(lái)設(shè)置,默認(rèn)值為設(shè)置,默認(rèn)值為1像素。像素。dash屬性。邊框可以畫成虛線形式,這需要屬性。邊框可以畫成虛線形式,這需要用到用到dash屬性,該屬性的值是整數(shù)
11、元組。屬性,該屬性的值是整數(shù)元組。最常最常用用的是二元組的是二元組(a,b),其中,其中a指定要畫指定要畫多少個(gè)像素,多少個(gè)像素,b指定要跳過(guò)多少個(gè)像素,如此重復(fù),指定要跳過(guò)多少個(gè)像素,如此重復(fù),直至邊框直至邊框畫畫完。若完。若a、b相等,可以簡(jiǎn)記為(相等,可以簡(jiǎn)記為(a,)。)。(2)矩形內(nèi)部填充屬性)矩形內(nèi)部填充屬性fill屬性。矩形內(nèi)部區(qū)域可以用屬性。矩形內(nèi)部區(qū)域可以用fill屬性來(lái)設(shè)置屬性來(lái)設(shè)置填充顏色,此屬性的默認(rèn)值是空串,效果是內(nèi)部填充顏色,此屬性的默認(rèn)值是空串,效果是內(nèi)部透明。透明。stipple屬性。在填充顏色時(shí),可以使用屬性。在填充顏色時(shí),可以使用stipple屬性設(shè)置填充畫
12、刷,即填充的點(diǎn)刻效果,屬性設(shè)置填充畫刷,即填充的點(diǎn)刻效果,可以取可以取gray12、gray25、gray50、gray75等值。等值。(3)其他屬性)其他屬性矩形還有個(gè)屬性矩形還有個(gè)屬性state,用于設(shè)置圖形的顯,用于設(shè)置圖形的顯示狀態(tài)。默認(rèn)值是示狀態(tài)。默認(rèn)值是NORMAL或或normal,即正常,即正常顯示。另一個(gè)有用的值是顯示。另一個(gè)有用的值是HIDDEN或或hidden,它使矩形在畫布上不可見(jiàn)。使一個(gè)圖形在它使矩形在畫布上不可見(jiàn)。使一個(gè)圖形在NORMAL和和HIDDEN兩個(gè)狀態(tài)之間交替變化,兩個(gè)狀態(tài)之間交替變化,即形成閃爍的效果。注意,屬性值用大寫字母即形成閃爍的效果。注意,屬性值用
13、大寫字母形式時(shí),不要加引號(hào),而用小寫字母形式時(shí),形式時(shí),不要加引號(hào),而用小寫字母形式時(shí),一定要加引號(hào),下面還有這種情況,一定要加引號(hào),下面還有這種情況,到時(shí)只列到時(shí)只列出出大寫字母形式。大寫字母形式。例例12-1 繪制圖繪制圖12-7所示的四個(gè)正方形所示的四個(gè)正方形。圖圖12-7 繪制四個(gè)繪制四個(gè)正方形正方形分析分析:利用畫布的:利用畫布的create_rectangle()方法繪方法繪制制正方形,注意設(shè)置屬性和四個(gè)正方形正方形,注意設(shè)置屬性和四個(gè)正方形之間的之間的位位置關(guān)系。置關(guān)系。tcost)3(sintytsint)3(costx例例12-2 繪制曲線繪制曲線分析分析:繪制函數(shù)曲線可采用
14、計(jì)算出函數(shù)曲線的各個(gè)點(diǎn)的:繪制函數(shù)曲線可采用計(jì)算出函數(shù)曲線的各個(gè)點(diǎn)的坐標(biāo),將各點(diǎn)畫出來(lái),如果這些點(diǎn)足夠密,坐標(biāo),將各點(diǎn)畫出來(lái),如果這些點(diǎn)足夠密,繪出的曲線會(huì)繪出的曲線會(huì)比較光滑。畫布對(duì)角沒(méi)有提供畫比較光滑。畫布對(duì)角沒(méi)有提供畫“點(diǎn)點(diǎn)”的方法,但可以畫的方法,但可以畫一個(gè)很小的矩形來(lái)當(dāng)作點(diǎn)。一個(gè)很小的矩形來(lái)當(dāng)作點(diǎn)。,t0,10。12.2.2 繪制橢圓與圓弧繪制橢圓與圓弧1繪制橢圓繪制橢圓畫布畫布對(duì)象提供對(duì)象提供create_oval()方法,用于在畫布上方法,用于在畫布上畫一個(gè)橢圓,其特例是圓。橢圓的位置和尺寸通過(guò)其外畫一個(gè)橢圓,其特例是圓。橢圓的位置和尺寸通過(guò)其外接矩形決定,而外接矩形由左上角坐
15、標(biāo)(接矩形決定,而外接矩形由左上角坐標(biāo)(x0,y0)和右)和右下角坐標(biāo)(下角坐標(biāo)(x1,y1)定義)定義。create_oval()方法的調(diào)用格式如下:方法的調(diào)用格式如下:畫布對(duì)象名畫布對(duì)象名.create_oval(x0,y0,x1,y1,屬性屬性設(shè)置設(shè)置)create_oval()的返回值是所創(chuàng)建橢圓的標(biāo)的返回值是所創(chuàng)建橢圓的標(biāo)識(shí)號(hào),可以將標(biāo)識(shí)號(hào)存入變量。識(shí)號(hào),可以將標(biāo)識(shí)號(hào)存入變量。和矩形類似,橢圓的常用屬性包括和矩形類似,橢圓的常用屬性包括outline、width、dash、fill、state和和tags等。畫布對(duì)等。畫布對(duì)象的象的itemconfig()方法、方法、delete()
16、方法和方法和move()方法同樣可用于橢圓的屬性設(shè)置、刪除和移動(dòng)方法同樣可用于橢圓的屬性設(shè)置、刪除和移動(dòng)。例例12-3 創(chuàng)建圖創(chuàng)建圖12-10所示的圓和橢圓。所示的圓和橢圓。圖圖12-10 繪制圓和橢圓繪制圓和橢圓分析:利用畫布的分析:利用畫布的create_oval方法繪制方法繪制一個(gè)圓一個(gè)圓和兩個(gè)橢圓,注意設(shè)置屬性和三個(gè)圖形和兩個(gè)橢圓,注意設(shè)置屬性和三個(gè)圖形之間的之間的位置關(guān)系。位置關(guān)系。例例12-4 描繪地球繞太陽(yáng)旋轉(zhuǎn)的軌道。描繪地球繞太陽(yáng)旋轉(zhuǎn)的軌道。分析:分別創(chuàng)建一個(gè)橢圓和兩個(gè)圓,并且為大圓分析:分別創(chuàng)建一個(gè)橢圓和兩個(gè)圓,并且為大圓形涂上紅色表示太陽(yáng),為小圓形涂上藍(lán)色表示地形涂上紅色表
17、示太陽(yáng),為小圓形涂上藍(lán)色表示地球球。2繪制圓弧繪制圓弧畫布對(duì)象提供畫布對(duì)象提供create_arc()方法,用于在方法,用于在畫布上創(chuàng)建一個(gè)弧形。與橢圓的繪制類似,畫布上創(chuàng)建一個(gè)弧形。與橢圓的繪制類似,create_arc()的參數(shù)是用來(lái)定義一個(gè)矩形的左的參數(shù)是用來(lái)定義一個(gè)矩形的左上角和右下角的坐標(biāo),該矩形唯一確定了一個(gè)上角和右下角的坐標(biāo),該矩形唯一確定了一個(gè)內(nèi)接橢圓(特例是圓),而最終要畫的弧形是內(nèi)接橢圓(特例是圓),而最終要畫的弧形是該橢圓的一段。該橢圓的一段。create_arc()方法的調(diào)用格式如下:方法的調(diào)用格式如下:畫布對(duì)象名畫布對(duì)象名.create_arc(x0,y0,x1,y1
18、,屬性屬性設(shè)設(shè)置置)create_arc()的返回值是所創(chuàng)建的返回值是所創(chuàng)建的圓弧的的圓弧的標(biāo)識(shí)號(hào)標(biāo)識(shí)號(hào),可以將標(biāo)識(shí)號(hào)存入變量。,可以將標(biāo)識(shí)號(hào)存入變量。弧形的開(kāi)始位置由屬性弧形的開(kāi)始位置由屬性start定義,其值為定義,其值為一個(gè)角度(一個(gè)角度(x軸方向?yàn)檩S方向?yàn)?);弧形的結(jié)束位置由);弧形的結(jié)束位置由屬性屬性extent定義,其值表示從開(kāi)始位置逆時(shí)針旋定義,其值表示從開(kāi)始位置逆時(shí)針旋轉(zhuǎn)的角度。轉(zhuǎn)的角度。start屬性的默認(rèn)值為屬性的默認(rèn)值為0,extent屬性屬性的默認(rèn)值為的默認(rèn)值為90。顯然,如果。顯然,如果start設(shè)置為設(shè)置為0,extent設(shè)置為設(shè)置為360,則畫出一個(gè)完整的橢圓,
19、效,則畫出一個(gè)完整的橢圓,效果和果和create_oval()方法一樣。方法一樣。屬性屬性style用于規(guī)定圓弧的樣式,可以取三用于規(guī)定圓弧的樣式,可以取三種值:種值:PIESLICE是扇形,即圓弧兩端與圓心相連;是扇形,即圓弧兩端與圓心相連;ARC是弧,即圓周上的一段;是弧,即圓周上的一段;CHORD是弓形,是弓形,即即弧加連接弧兩端的弦?;〖舆B接弧兩端的弦。Style的默認(rèn)值的默認(rèn)值是是PIESLICE。from tkinter import *w=Tk()c=Canvas(w,width=350,height=150,bg=white)c.pack()c.create_arc(20,40
20、,100,120,width=2) #默認(rèn)樣默認(rèn)樣式是式是PIESLICEc.create_arc(120,40,200,120,style=CHORD,width=2)c.create_arc(220,40,300,120,style=ARC,width=2)弧形的其他常用屬性弧形的其他常用屬性outline、width、dash、fill、state和和tags的意義和默認(rèn)值都和的意義和默認(rèn)值都和矩形類似。注意只有矩形類似。注意只有PIESLICE和和CHORD形狀形狀才可填充顏色才可填充顏色。畫布畫布對(duì)象的對(duì)象的itemconfig()方法、方法、delete()方法、和方法、和move
21、()辦法同樣可用于弧形的屬性設(shè)置、刪除和移動(dòng)。辦法同樣可用于弧形的屬性設(shè)置、刪除和移動(dòng)。例例12-5 創(chuàng)建圖創(chuàng)建圖12-13所示的扇葉圖形所示的扇葉圖形。12.2.3 繪制線條與多邊形繪制線條與多邊形1繪制線條繪制線條畫布畫布對(duì)象提供對(duì)象提供create_line()方法,用于在畫方法,用于在畫布上創(chuàng)建連接多個(gè)點(diǎn)的線段序列,其調(diào)用格式如布上創(chuàng)建連接多個(gè)點(diǎn)的線段序列,其調(diào)用格式如下:下:畫布對(duì)象名畫布對(duì)象名.create_line(x0,y0,x1,y1,,xn,yn,屬性設(shè)置屬性設(shè)置)create_line()方法將各點(diǎn)(方法將各點(diǎn)(x0,y0),),(x1,y1),,(,(xn,yn)按順序
22、用線條連接起來(lái),)按順序用線條連接起來(lái),返回值是所創(chuàng)建的線條的標(biāo)識(shí)號(hào),返回值是所創(chuàng)建的線條的標(biāo)識(shí)號(hào),可以將標(biāo)識(shí)號(hào)可以將標(biāo)識(shí)號(hào)存入變量。存入變量。沒(méi)有沒(méi)有特別說(shuō)明的話,相鄰兩點(diǎn)間用直接連特別說(shuō)明的話,相鄰兩點(diǎn)間用直接連接,即圖形整體上是一條折線。但如果將屬性接,即圖形整體上是一條折線。但如果將屬性smooth設(shè)置成非設(shè)置成非0值,則各點(diǎn)被解釋成值,則各點(diǎn)被解釋成B樣條曲樣條曲線的頂點(diǎn),圖形整體是一條平滑的曲線。線的頂點(diǎn),圖形整體是一條平滑的曲線。線條線條不能形成邊框和內(nèi)部區(qū)域兩部分,因不能形成邊框和內(nèi)部區(qū)域兩部分,因此沒(méi)有此沒(méi)有outline屬性,只有屬性,只有fill屬性,表示線條的屬性,表示
23、線條的顏色,其默認(rèn)值為黑色。顏色,其默認(rèn)值為黑色。線條可以通過(guò)屬性線條可以通過(guò)屬性arrow來(lái)設(shè)置箭頭,該屬來(lái)設(shè)置箭頭,該屬性的默認(rèn)值是性的默認(rèn)值是NONE(無(wú)箭頭)。如果將(無(wú)箭頭)。如果將arrow設(shè)置為設(shè)置為FIRST,則箭頭在,則箭頭在(x0,y0)兩端;設(shè)置為兩端;設(shè)置為L(zhǎng)AST,則箭頭在(,則箭頭在(xn,yn)端;設(shè)置為)端;設(shè)置為BOTH,則兩端都有箭頭。則兩端都有箭頭。屬性屬性arrowshape用于描述箭頭形狀,其值用于描述箭頭形狀,其值為三元組(為三元組(d1,d2,d3),含義如圖所示。默認(rèn)),含義如圖所示。默認(rèn)值為(值為(8,10,3)。和和前面介紹的各種圖形一樣,線
24、條還具前面介紹的各種圖形一樣,線條還具有有width、dash、state、tags等屬性。畫布等屬性。畫布對(duì)象的對(duì)象的itemconfig()方法、方法、delete()方法和方法和move()方法同樣可用于線條的屬性設(shè)置、刪方法同樣可用于線條的屬性設(shè)置、刪除和移動(dòng)。除和移動(dòng)。例例12-6 繪制繪制y=sin x sin(4x)曲線。曲線。2繪制多邊形繪制多邊形畫布畫布對(duì)象提供對(duì)象提供create_polygon()方法,用于方法,用于在畫布上創(chuàng)建一個(gè)多邊形。在畫布上創(chuàng)建一個(gè)多邊形。create_polygon()方方法的調(diào)用格式如下:法的調(diào)用格式如下:畫布對(duì)象名畫布對(duì)象名.create_p
25、olygon(x0,y0,x1,y1,,屬性設(shè)置屬性設(shè)置)create_polygon()的返回值是創(chuàng)建多邊形的的返回值是創(chuàng)建多邊形的標(biāo)識(shí)號(hào),可以將標(biāo)識(shí)號(hào)存入一個(gè)變量。標(biāo)識(shí)號(hào),可以將標(biāo)識(shí)號(hào)存入一個(gè)變量。和和矩形類似,矩形類似,outline和和fill分別設(shè)置多邊形分別設(shè)置多邊形的邊框顏色和內(nèi)部填充色,但與矩形的邊框顏色和內(nèi)部填充色,但與矩形不同的是,不同的是,多邊形的多邊形的outline屬性默認(rèn)值為空串,屬性默認(rèn)值為空串,即邊框不即邊框不可見(jiàn),而可見(jiàn),而fill屬性的默認(rèn)值為黑色屬性的默認(rèn)值為黑色。與線條類似,一般用直線連接頂點(diǎn),但如與線條類似,一般用直線連接頂點(diǎn),但如果將屬性果將屬性sm
26、ooth設(shè)置成非設(shè)置成非0值,則表示用值,則表示用B樣條樣條曲線連接頂點(diǎn),這樣繪制的是由平滑曲線圍成曲線連接頂點(diǎn),這樣繪制的是由平滑曲線圍成的圖形。的圖形。多邊形的另幾個(gè)常用屬性多邊形的另幾個(gè)常用屬性width、dash、state和和tags的用法都和矩形類似。畫布對(duì)象的的用法都和矩形類似。畫布對(duì)象的itemconfig()方法、方法、delete()方法和方法和move()方法方法同樣可用于多邊形的屬性設(shè)置、刪除和移動(dòng)。同樣可用于多邊形的屬性設(shè)置、刪除和移動(dòng)。例例12-7 用紅、黃、綠三種顏色填充矩形用紅、黃、綠三種顏色填充矩形。圖圖12-16 三種顏色填充的矩形三種顏色填充的矩形分析:先
27、畫矩形,再用紅、黃、綠三種分析:先畫矩形,再用紅、黃、綠三種顏色分別顏色分別繪制三角形、平行四邊形和三角形,繪制三角形、平行四邊形和三角形,三個(gè)圖形連三個(gè)圖形連在一起填充矩形。在一起填充矩形。12.2.4 顯示文本與圖像顯示文本與圖像1顯示文本顯示文本畫布畫布對(duì)象提供對(duì)象提供create_text()方法,用于在畫方法,用于在畫布上顯示一行或多行文本。與普通的字符串不同布上顯示一行或多行文本。與普通的字符串不同,這里的文本被當(dāng)作圖形對(duì)象。這里的文本被當(dāng)作圖形對(duì)象。create_text()方法的調(diào)用格式如下:方法的調(diào)用格式如下:畫布畫布對(duì)象名對(duì)象名.create_text(x,y,屬性設(shè)置屬性
28、設(shè)置)其中其中(x,y)指定文本顯示的參考位置)指定文本顯示的參考位置。create_text()的返回值是所創(chuàng)造的文本的的返回值是所創(chuàng)造的文本的標(biāo)識(shí)號(hào),標(biāo)識(shí)號(hào),可以將標(biāo)識(shí)號(hào)存入變量中??梢詫?biāo)識(shí)號(hào)存入變量中。文本文本內(nèi)容由內(nèi)容由text屬性設(shè)置,其值就是要顯示屬性設(shè)置,其值就是要顯示的字符串。字符串中可以使用換行字符的字符串。字符串中可以使用換行字符“n”,從,從而實(shí)現(xiàn)多行文本的顯示。而實(shí)現(xiàn)多行文本的顯示。anchor屬性用于指定文本的哪個(gè)錨點(diǎn)與顯示屬性用于指定文本的哪個(gè)錨點(diǎn)與顯示位置位置(x,y)對(duì)齊,通過(guò)錨點(diǎn)可以控制文本的相對(duì)位對(duì)齊,通過(guò)錨點(diǎn)可以控制文本的相對(duì)位置,例如,若將置,例如,若
29、將anchor設(shè)置為設(shè)置為N,則將文本邊界,則將文本邊界框的頂邊中點(diǎn)置于參考點(diǎn)(框的頂邊中點(diǎn)置于參考點(diǎn)(x,y)。pfill屬性用于設(shè)置文本的顏色,默認(rèn)值為黑色。屬性用于設(shè)置文本的顏色,默認(rèn)值為黑色。如果設(shè)置為空串,則文本不可見(jiàn)。如果設(shè)置為空串,則文本不可見(jiàn)。justify屬性用屬性用于控制多行文本的對(duì)齊方式,其值為于控制多行文本的對(duì)齊方式,其值為L(zhǎng)EFT、CENTER或或RIGHT,默認(rèn)值為,默認(rèn)值為L(zhǎng)EFT。pwidth屬性用于控制文本的寬度,超出寬度就要屬性用于控制文本的寬度,超出寬度就要換行。換行。pFont屬性指定文本字體。字體描述使用一個(gè)三屬性指定文本字體。字體描述使用一個(gè)三元組,
30、包含字體名稱、大小和字形名稱,例如元組,包含字體名稱、大小和字形名稱,例如(Times New Roman,10,bold)表示)表示10號(hào)號(hào)加黑新羅馬字,(加黑新羅馬字,(宋體宋體,12,italic)表示)表示12號(hào)號(hào)斜體斜體宋體。宋體。pstate屬性、屬性、tags屬性的意義與其他圖形屬性的意義與其他圖形對(duì)象相對(duì)象相同同。畫布畫布對(duì)象的對(duì)象的itemcget()和和intemconfig()方方法可用于讀取或修改文本的內(nèi)容,畫布對(duì)象的法可用于讀取或修改文本的內(nèi)容,畫布對(duì)象的delete()方法、方法、move()方法可用于文本的刪除方法可用于文本的刪除和移動(dòng)。和移動(dòng)。例例12-8 畫布
31、文本顯示示例畫布文本顯示示例。2顯示圖像顯示圖像tkinter模塊針對(duì)不同格式的圖像文件有不同模塊針對(duì)不同格式的圖像文件有不同的顯示方法,這里只介紹顯示的顯示方法,這里只介紹顯示gif格式圖像的方法。格式圖像的方法。具體步驟如下。具體步驟如下。(1)利用)利用tkinter模塊提供的模塊提供的PhotoImage類來(lái)創(chuàng)類來(lái)創(chuàng)建圖像對(duì)象,語(yǔ)句格式如下:建圖像對(duì)象,語(yǔ)句格式如下:圖形對(duì)象圖形對(duì)象=PhotoImage(file=圖像文件名圖像文件名)其中,屬性其中,屬性file用于指定圖像文件(支持用于指定圖像文件(支持gif、png、bmp、pgm、ppm等格式),等格式),PhotoImage
32、()返返回值是一個(gè)圖像對(duì)象,可以用變量來(lái)引用回值是一個(gè)圖像對(duì)象,可以用變量來(lái)引用這個(gè)對(duì)這個(gè)對(duì)象。象。(2)通過(guò)畫布對(duì)象提供的)通過(guò)畫布對(duì)象提供的create_image()方法方法在在畫布畫布上顯示圖像,方法的調(diào)用格上顯示圖像,方法的調(diào)用格式如下式如下:畫布畫布對(duì)象名對(duì)象名.create_image(x,y,image=圖像對(duì)象圖像對(duì)象,屬性設(shè)置屬性設(shè)置)其中其中,(x,y)是決定圖像顯示位置的參考點(diǎn)是決定圖像顯示位置的參考點(diǎn)。create_image()方法的返回值是所創(chuàng)建的圖像在方法的返回值是所創(chuàng)建的圖像在畫布上的標(biāo)識(shí)號(hào),可以將標(biāo)識(shí)號(hào)存入一個(gè)變量中。畫布上的標(biāo)識(shí)號(hào),可以將標(biāo)識(shí)號(hào)存入一個(gè)變量
33、中。圖像在畫布上的位置由參考點(diǎn)(圖像在畫布上的位置由參考點(diǎn)(x,y)和)和anchor屬性決定,具體設(shè)置與文本相同??梢詫傩詻Q定,具體設(shè)置與文本相同。可以為圖像設(shè)置屬性為圖像設(shè)置屬性state、tags,意義與其他圖形,意義與其他圖形對(duì)象相同。畫布對(duì)象的對(duì)象相同。畫布對(duì)象的delete()方法、方法、move()方法同樣可用于圖像的刪除和移動(dòng)。方法同樣可用于圖像的刪除和移動(dòng)。例例12-9 假設(shè)有圖像文件假設(shè)有圖像文件e:mypythonpython.png,將該圖像顯示在,將該圖像顯示在畫布中。畫布中。12.3 圖形的事件處理圖形的事件處理畫布畫布及畫布上的圖形都是對(duì)象,都可以與操作及畫布上的
34、圖形都是對(duì)象,都可以與操作事件綁定,這樣用戶可以利用鍵盤、鼠標(biāo)來(lái)操作、事件綁定,這樣用戶可以利用鍵盤、鼠標(biāo)來(lái)操作、控制畫布和圖形??刂飘嫴己蛨D形。例例12-10 在畫布輪換交替顯示兩行文本,鼠標(biāo)左在畫布輪換交替顯示兩行文本,鼠標(biāo)左鍵單擊文本時(shí)替換一次,右鍵單擊文本時(shí)隱藏文本鍵單擊文本時(shí)替換一次,右鍵單擊文本時(shí)隱藏文本,鼠標(biāo)指針指向文本時(shí)使文本隨機(jī)移動(dòng),鼠標(biāo)指針指向文本時(shí)使文本隨機(jī)移動(dòng)。12.4.1 turtle繪圖繪圖1導(dǎo)入導(dǎo)入turtle模塊模塊使用使用turtle繪圖,首先需要導(dǎo)入繪圖,首先需要導(dǎo)入turtle模塊,模塊,有以下兩種方法。有以下兩種方法。 import turtle fro
35、m turtle import *12.4 turtle繪圖與繪圖與Graphics圖形庫(kù)圖形庫(kù)2turtle繪圖屬性繪圖屬性turtle繪圖有三個(gè)要素,分別是位置、方向繪圖有三個(gè)要素,分別是位置、方向和畫筆。和畫筆。(1)位置是指箭頭在)位置是指箭頭在Turtle 圖形窗口中的位置。圖形窗口中的位置。(2)方向是指箭頭的指向,使用)方向是指箭頭的指向,使用left(degree)、right(degree)函數(shù)使得箭頭分別向左、向右旋函數(shù)使得箭頭分別向左、向右旋轉(zhuǎn)轉(zhuǎn)degree度。度。(3)畫筆是指繪制的線條的顏色和寬度。)畫筆是指繪制的線條的顏色和寬度。有關(guān)畫筆控制函數(shù)如下。有關(guān)畫筆控制函
36、數(shù)如下。down():放下畫筆,移動(dòng)時(shí)繪制圖形。這也:放下畫筆,移動(dòng)時(shí)繪制圖形。這也是默認(rèn)的狀態(tài)。是默認(rèn)的狀態(tài)。up():提起畫筆,移動(dòng)時(shí)不繪制圖形。:提起畫筆,移動(dòng)時(shí)不繪制圖形。pensize(w)或或width(w):繪制圖形時(shí)畫筆的:繪制圖形時(shí)畫筆的寬度,寬度,w為一個(gè)正數(shù)。為一個(gè)正數(shù)。pencolor(s)或或color(s):繪制圖形時(shí)畫筆的顏:繪制圖形時(shí)畫筆的顏色,色,s是一個(gè)字符串,例如是一個(gè)字符串,例如red、blue、green分別表示紅色、藍(lán)色、綠色。分別表示紅色、藍(lán)色、綠色。fillcolor(s):繪制圖形的填充顏色。:繪制圖形的填充顏色。3turtle繪圖命令繪圖命令
37、turtle繪圖有著許多控制箭頭運(yùn)動(dòng)的命令,繪圖有著許多控制箭頭運(yùn)動(dòng)的命令,從而繪制出各種圖形。從而繪制出各種圖形。goto(x,y):將箭頭從當(dāng)前位置徑直移動(dòng)到坐標(biāo):將箭頭從當(dāng)前位置徑直移動(dòng)到坐標(biāo)為(為(x,y)的位置,這時(shí)當(dāng)前方向不起作用,移)的位置,這時(shí)當(dāng)前方向不起作用,移動(dòng)后方向也不改變。如果想要移動(dòng)箭頭到(動(dòng)后方向也不改變。如果想要移動(dòng)箭頭到(x,y)處理,但不要繪制圖形,可以使用處理,但不要繪制圖形,可以使用up()函數(shù)。例函數(shù)。例如,下列命令繪制一根水平直線。如,下列命令繪制一根水平直線。from turtle import *reset() #將整個(gè)繪圖窗口清空并將箭頭置于原點(diǎn)
38、將整個(gè)繪圖窗口清空并將箭頭置于原點(diǎn)(窗口的中心)。(窗口的中心)。goto(100,0) #當(dāng)前位置(當(dāng)前位置(0,0)運(yùn)動(dòng)到運(yùn)動(dòng)到(100,0)位置位置forward(d):控制箭頭向前移動(dòng),其中:控制箭頭向前移動(dòng),其中d代表代表移動(dòng)的距離。在移動(dòng)前,需要設(shè)置箭頭的位置、移動(dòng)的距離。在移動(dòng)前,需要設(shè)置箭頭的位置、方向和畫筆三個(gè)屬性。方向和畫筆三個(gè)屬性。backward(d):與:與forward()函數(shù)相反,控制函數(shù)相反,控制箭頭向后移動(dòng),其中箭頭向后移動(dòng),其中d代表移動(dòng)的距離。代表移動(dòng)的距離。speed(v):控制箭頭移動(dòng)的速度,:控制箭頭移動(dòng)的速度,v取取0,10范圍的整數(shù),數(shù)字越大,速
39、度越快。也可以范圍的整數(shù),數(shù)字越大,速度越快。也可以使用使用slow、fast來(lái)控制速度。來(lái)控制速度。例例12-11 繪制一個(gè)正方形。繪制一個(gè)正方形。程序如下:程序如下:from turtle import *color(blue) #定義繪制時(shí)畫筆的顏色定義繪制時(shí)畫筆的顏色pensize(5) #定義繪制時(shí)畫筆的線條寬度定義繪制時(shí)畫筆的線條寬度speed(10) #定義繪圖的速度定義繪圖的速度f(wàn)or i in range(4): #繪出正方形的四條邊繪出正方形的四條邊 forward(100) right(90)在在設(shè)置了繪圖狀態(tài)之后,控制箭頭前進(jìn)設(shè)置了繪圖狀態(tài)之后,控制箭頭前進(jìn)(forwa
40、rd)一段距離,右轉(zhuǎn)()一段距離,右轉(zhuǎn)(right)90度,度,重重復(fù)四次即可。復(fù)四次即可。turtle模塊還有一些內(nèi)置函數(shù),例如畫圓的模塊還有一些內(nèi)置函數(shù),例如畫圓的函數(shù)函數(shù)circle(r),該函數(shù)以箭頭當(dāng)前位置為圓的底,該函數(shù)以箭頭當(dāng)前位置為圓的底部坐標(biāo),以部坐標(biāo),以r為半徑畫圓。為半徑畫圓。例例12-12 繪制三個(gè)同心圓。繪制三個(gè)同心圓。程序如下:程序如下:from turtle import *for i in range(3): up() #提起畫筆提起畫筆 goto(0,-50-i*50) #確定畫圓的起點(diǎn)確定畫圓的起點(diǎn) down() #放下畫筆放下畫筆 circle(50+i*
41、50) #畫圓畫圓12.4.2 Graphics圖形庫(kù)圖形庫(kù)1模塊導(dǎo)入與圖形窗口模塊導(dǎo)入與圖形窗口graphics模塊文件(模塊文件(graphics.py)可以從網(wǎng))可以從網(wǎng)站站/zelle/python下下載,下載后將載,下載后將graphics.py文件與用戶自己的圖形文件與用戶自己的圖形程序放在一個(gè)目錄中,或者放在程序放在一個(gè)目錄中,或者放在Python安裝目錄安裝目錄中即可。中即可。使用使用graphics繪圖,首先要導(dǎo)入繪圖,首先要導(dǎo)入graphics模模塊,語(yǔ)句格式有如下兩種。塊,語(yǔ)句格式有如下兩種。 import graphics
42、from graphics import *其次其次,使用,使用graphics提供的提供的GraphWin()函函數(shù)創(chuàng)建一個(gè)圖形窗口。在圖形窗口中,設(shè)有標(biāo)題數(shù)創(chuàng)建一個(gè)圖形窗口。在圖形窗口中,設(shè)有標(biāo)題欄,以及最小化、最大化、關(guān)閉等按鈕。例如:欄,以及最小化、最大化、關(guān)閉等按鈕。例如: win=GraphWin()GraphWin()函數(shù)在屏幕上創(chuàng)建了函數(shù)在屏幕上創(chuàng)建了一個(gè)圖形一個(gè)圖形窗口窗口。graphics圖形窗口也有各種屬性,在調(diào)用圖形窗口也有各種屬性,在調(diào)用GraphWin()函數(shù)時(shí)可以提供各種參數(shù)。例如:函數(shù)時(shí)可以提供各種參數(shù)。例如: win=GraphWin(My Graphics
43、Window,300,200)這這條語(yǔ)句的含義是在屏幕上創(chuàng)建一個(gè)窗口對(duì)條語(yǔ)句的含義是在屏幕上創(chuàng)建一個(gè)窗口對(duì)象,窗口標(biāo)題為象,窗口標(biāo)題為“My Graphics Window”,寬,寬度為度為300像素,高度為像素,高度為200像素。像素。窗口窗口操作結(jié)束后應(yīng)該關(guān)閉圖形窗口,關(guān)閉窗操作結(jié)束后應(yīng)該關(guān)閉圖形窗口,關(guān)閉窗口的函數(shù)調(diào)用方法為:口的函數(shù)調(diào)用方法為: win.close()2圖形對(duì)象圖形對(duì)象在在graphics模塊中,提供了模塊中,提供了GraphWin(圖形窗口)、(圖形窗口)、Point(點(diǎn))、(點(diǎn))、Line(直線)、(直線)、Circle(圓)、(圓)、Oval(橢圓)、(橢圓)、R
44、ectangle(矩(矩形)、形)、Polygon(多邊形)、(多邊形)、Text(文本)等(文本)等類,利用類可以創(chuàng)建相應(yīng)的圖形對(duì)象。每個(gè)對(duì)類,利用類可以創(chuàng)建相應(yīng)的圖形對(duì)象。每個(gè)對(duì)象都是相應(yīng)的類的實(shí)例,對(duì)象都具有自己的屬象都是相應(yīng)的類的實(shí)例,對(duì)象都具有自己的屬性和方法(操作)。性和方法(操作)。(1)點(diǎn))點(diǎn)graphics模塊提供了模塊提供了point類,用于在窗口中畫類,用于在窗口中畫點(diǎn)。創(chuàng)建點(diǎn)對(duì)象的語(yǔ)句格式為:點(diǎn)。創(chuàng)建點(diǎn)對(duì)象的語(yǔ)句格式為:p=Point(x坐標(biāo)坐標(biāo),y坐標(biāo)坐標(biāo)) from graphics import * win=GraphWin() p=Point(100,50) p
45、.draw(win) print(p.getX(),p.getY()100 50 p.move(20,30) print(p.getX(),p.getY()120 80此外,此外,Point對(duì)象還提供以下方法。對(duì)象還提供以下方法。pp.setFill():設(shè)置點(diǎn):設(shè)置點(diǎn)p的顏色。的顏色。pp.setOutline():設(shè)置邊框的顏色。對(duì):設(shè)置邊框的顏色。對(duì)Point對(duì)象來(lái)說(shuō),與對(duì)象來(lái)說(shuō),與setFill()方法沒(méi)有區(qū)別。方法沒(méi)有區(qū)別。pp.undraw():隨藏對(duì)象:隨藏對(duì)象p,即在圖形窗口中,即在圖形窗口中對(duì)象對(duì)象p變成不可見(jiàn)。注意,隱藏并非刪除,對(duì)變成不可見(jiàn)。注意,隱藏并非刪除,對(duì)象象p仍
46、然存在,隨時(shí)可以重新執(zhí)行仍然存在,隨時(shí)可以重新執(zhí)行draw()。pp.clone():復(fù)制一個(gè)與:復(fù)制一個(gè)與p一模一樣的對(duì)象。一模一樣的對(duì)象。除了除了用字符串指定顏色之外,用字符串指定顏色之外,graphics模模塊還提供了塊還提供了color_rgb(r,g,b)函數(shù)來(lái)設(shè)置顏色,函數(shù)來(lái)設(shè)置顏色,其中的其中的r,g,b參數(shù)取參數(shù)取0255之間的整數(shù),分之間的整數(shù),分別表示紅色、綠色、藍(lán)色的數(shù)值,別表示紅色、綠色、藍(lán)色的數(shù)值,color_rgb()函數(shù)表示的顏色就是三種顏色混合以后的顏色。函數(shù)表示的顏色就是三種顏色混合以后的顏色。例如例如color_rgb(255,0,0)表示亮紅色,表示亮紅色
47、,color_rgb(0,255,0)表示亮綠色。表示亮綠色。(2)直線)直線直線直線類類Line用于繪制直線。創(chuàng)建直線對(duì)象用于繪制直線。創(chuàng)建直線對(duì)象的語(yǔ)句格式為:的語(yǔ)句格式為:line=Line(端點(diǎn)端點(diǎn)1,端點(diǎn)端點(diǎn)2)其中其中,兩個(gè)端點(diǎn)都是,兩個(gè)端點(diǎn)都是Point對(duì)象。對(duì)象。和和Point對(duì)象一樣,對(duì)象一樣,Line對(duì)象也支持對(duì)象也支持draw()、undraw()、move()、setFill()、setOutline()、clone()等方法。此外,等方法。此外,Line對(duì)象還支持對(duì)象還支持setArrow()方法,用于為直線畫箭方法,用于為直線畫箭頭頭,setWidth()方法用于設(shè)
48、置方法用于設(shè)置直線寬度。直線寬度。例例12-13 利用直線對(duì)象繪制一個(gè)正方形利用直線對(duì)象繪制一個(gè)正方形。(3)圓)圓圓圓類為類為Circle,創(chuàng)建圓形對(duì)象的語(yǔ)句格式,創(chuàng)建圓形對(duì)象的語(yǔ)句格式為:為:c=Circle(圓心圓心,半徑半徑)其中其中,圓心是,圓心是Point對(duì)象,半徑是個(gè)數(shù)值。對(duì)象,半徑是個(gè)數(shù)值。Circle對(duì)象同樣支持對(duì)象同樣支持draw()、undraw()、setFill()、setOutline、clone()、setWidth()等方法。此外,等方法。此外,Circle對(duì)象還支持對(duì)象還支持c.getRadius()方法,用于獲取圓形對(duì)象方法,用于獲取圓形對(duì)象c的半徑。的半徑
49、。例例12-14 繪制三個(gè)同心圓,并且將它們填充不繪制三個(gè)同心圓,并且將它們填充不同顏色同顏色。(4)橢圓)橢圓橢圓橢圓類為類為Oval,創(chuàng)建橢圓對(duì)象的語(yǔ)句格式,創(chuàng)建橢圓對(duì)象的語(yǔ)句格式為:為:o=Oval(左上角左上角,右下角右下角)其中其中,左上角和右下角是兩個(gè),左上角和右下角是兩個(gè)Point對(duì)象,對(duì)象,用于指定一個(gè)矩形,再由這個(gè)矩形定義一個(gè)內(nèi)用于指定一個(gè)矩形,再由這個(gè)矩形定義一個(gè)內(nèi)接橢圓。橢圓對(duì)象同樣支持接橢圓。橢圓對(duì)象同樣支持draw()、undraw()、move()、setFill()、setOutline()、clone()、setWidth()等方法。等方法。例例12-15 繪制
50、四個(gè)相扣的圓,并且將它們繪制四個(gè)相扣的圓,并且將它們的邊線設(shè)置成不同顏色,邊線寬度相同。的邊線設(shè)置成不同顏色,邊線寬度相同。(5)矩形)矩形矩形矩形類為類為Rectangle,創(chuàng)建矩形對(duì)象的語(yǔ)句,創(chuàng)建矩形對(duì)象的語(yǔ)句格式為:格式為:r=Rectangle(左上角左上角,右下角右下角)其中其中,左上角和右下角是兩個(gè),左上角和右下角是兩個(gè)Point對(duì)象,對(duì)象,用于指定矩形。用于指定矩形。矩形矩形對(duì)象同樣支持對(duì)象同樣支持draw()、undraw()、move()、setFill()、setOutline()、clone()、setWidth()等方法。此外,矩形還支持的等方法。此外,矩形還支持的方法
51、有方法有r.getP1()、r.getP2和和r.getCenter(),分別,分別用于獲用于獲取取左上角、右下角和中心坐標(biāo),返回值都是左上角、右下角和中心坐標(biāo),返回值都是Point對(duì)象。對(duì)象。例例12-16 繪制圖繪制圖12-25所示的正弦曲線圖形所示的正弦曲線圖形。(6)多邊形)多邊形多邊形多邊形類為類為Polygon,創(chuàng)建多邊形對(duì)象的語(yǔ),創(chuàng)建多邊形對(duì)象的語(yǔ)句格式為:句格式為:p=Polygon(頂點(diǎn)頂點(diǎn)1,頂點(diǎn)頂點(diǎn)n)將將各頂點(diǎn)用直線相連,即成多邊形。各頂點(diǎn)用直線相連,即成多邊形。多邊形多邊形對(duì)象同樣支持對(duì)象同樣支持draw()、undraw()、move()、setFill()、set
52、Outline()、clone()、setWidth()等方法。此外還支持方法等方法。此外還支持方法poly.getPoints(),用于獲取多邊形的,用于獲取多邊形的各個(gè)頂點(diǎn)各個(gè)頂點(diǎn)坐標(biāo)坐標(biāo)。例例12-17 繪制紅色的正五邊形。繪制紅色的正五邊形。(7)文本)文本文本文本類為類為Text,創(chuàng)建文本對(duì)象的語(yǔ)句格,創(chuàng)建文本對(duì)象的語(yǔ)句格式為:式為:t=Text(中心點(diǎn)中心點(diǎn),字符串字符串)其中其中,中心點(diǎn)是個(gè),中心點(diǎn)是個(gè)Point對(duì)象,字符串對(duì)象,字符串是顯示的文本內(nèi)容。是顯示的文本內(nèi)容。文本文本對(duì)象支持許多方法。對(duì)象支持許多方法。例例12-18 文本格式示例。文本格式示例。3交互式圖形操作交互式
53、圖形操作graphics模塊提供了兩個(gè)簡(jiǎn)單的方法獲得模塊提供了兩個(gè)簡(jiǎn)單的方法獲得用戶在圖形界面窗口中的操作事件。用戶在圖形界面窗口中的操作事件。(1)捕捉鼠標(biāo)單擊事件)捕捉鼠標(biāo)單擊事件可以可以通過(guò)通過(guò)GraphWin類中的類中的getMouse()方方法獲得用戶在窗口內(nèi)單擊鼠標(biāo)的信息。當(dāng)法獲得用戶在窗口內(nèi)單擊鼠標(biāo)的信息。當(dāng)getMouse()方法被一個(gè)方法被一個(gè)GraphWin對(duì)象調(diào)用,對(duì)象調(diào)用,程序?qū)⑼V共⒌却脩粼诖翱趦?nèi)單擊鼠標(biāo)。用程序?qū)⑼V共⒌却脩粼诖翱趦?nèi)單擊鼠標(biāo)。用戶單擊鼠標(biāo)的位置以戶單擊鼠標(biāo)的位置以Point對(duì)象作為返回值對(duì)象作為返回值返回返回給給程序。程序。看下面的看下面的程序程
54、序from graphics import *win=GraphWin()p=win.getMouse()print(p.getX(),p.getY()getMouse()的返回值是一個(gè)的返回值是一個(gè)Point對(duì)象,對(duì)象,使用該對(duì)象的使用該對(duì)象的getX()和和getY()方法可以得到單擊方法可以得到單擊鼠標(biāo)的坐標(biāo)。鼠標(biāo)的坐標(biāo)。例例12-19 在窗口單擊鼠標(biāo)時(shí)繪制一個(gè)綠色的正在窗口單擊鼠標(biāo)時(shí)繪制一個(gè)綠色的正方形。方形。(2)處理文本輸入)處理文本輸入graphics模塊還包括一個(gè)輸入對(duì)象模塊還包括一個(gè)輸入對(duì)象Entry,用于獲取窗口中的鍵盤輸入事件。用于獲取窗口中的鍵盤輸入事件。Entry對(duì)象
55、對(duì)象在圖形窗口中創(chuàng)建一個(gè)文本框,它與在圖形窗口中創(chuàng)建一個(gè)文本框,它與Text對(duì)象對(duì)象類似,也使用類似,也使用setText()和和getText()方法。不同方法。不同之處在于之處在于Entry對(duì)象的內(nèi)容可以被用戶修改。對(duì)象的內(nèi)容可以被用戶修改。結(jié)合下面的溫度轉(zhuǎn)換程序說(shuō)明其用法。結(jié)合下面的溫度轉(zhuǎn)換程序說(shuō)明其用法。例例12-20 創(chuàng)建一個(gè)圖形窗口,其中有一個(gè)輸入框,創(chuàng)建一個(gè)圖形窗口,其中有一個(gè)輸入框,用于輸入攝氏溫度值,同時(shí)提供一個(gè)用于輸入攝氏溫度值,同時(shí)提供一個(gè)“溫度轉(zhuǎn)換溫度轉(zhuǎn)換”按鈕,單擊按鈕時(shí)能夠?qū)z氏溫度轉(zhuǎn)換為華氏溫度,按鈕,單擊按鈕時(shí)能夠?qū)z氏溫度轉(zhuǎn)換為華氏溫度,同時(shí)同時(shí)“溫度轉(zhuǎn)換溫度
56、轉(zhuǎn)換”變?yōu)樽優(yōu)椤巴顺鐾顺觥卑粹o,單擊按鈕退按鈕,單擊按鈕退出圖形窗口出圖形窗口。12.5 圖形應(yīng)用舉例圖形應(yīng)用舉例12.5.1 驗(yàn)證驗(yàn)證Fibonacci數(shù)列的性質(zhì)數(shù)列的性質(zhì)例例12-21 取取n=8,用圖解法驗(yàn)證,用圖解法驗(yàn)證Fibonacci數(shù)數(shù)列的性質(zhì):列的性質(zhì):f12+f22+f32+f82=f8f912.5.2 統(tǒng)計(jì)圖表統(tǒng)計(jì)圖表例例12-22按百分制輸入學(xué)生考試成績(jī)(輸入負(fù)按百分制輸入學(xué)生考試成績(jī)(輸入負(fù)數(shù)時(shí)結(jié)束輸入),統(tǒng)計(jì)各等級(jí)分?jǐn)?shù)的人數(shù)(成績(jī)數(shù)時(shí)結(jié)束輸入),統(tǒng)計(jì)各等級(jí)分?jǐn)?shù)的人數(shù)(成績(jī)90為優(yōu)秀,成績(jī)?yōu)閮?yōu)秀,成績(jī)80但但90為良好,成績(jī)?yōu)榱己茫煽?jī)70但但80為中等,成績(jī)?yōu)橹械?,?/p>
57、績(jī)60但但70為及格,成績(jī)?yōu)榧案?,成?jī)60為不及格),并用餅圖來(lái)直觀地給出各等級(jí)為不及格),并用餅圖來(lái)直觀地給出各等級(jí)人數(shù)的比例人數(shù)的比例。12.5.3 分形曲線分形曲線例例12-23利用利用turtle繪圖繪制科赫曲線繪圖繪制科赫曲線??坪涨€科赫曲線科赫雪花曲線科赫雪花曲線12.5.4 利用動(dòng)畫模擬天體運(yùn)動(dòng)利用動(dòng)畫模擬天體運(yùn)動(dòng)例例12-24 利用動(dòng)畫演示太陽(yáng)、地球和月球三個(gè)利用動(dòng)畫演示太陽(yáng)、地球和月球三個(gè)天體之間的運(yùn)動(dòng)情況,即月球繞地球運(yùn)動(dòng),并且天體之間的運(yùn)動(dòng)情況,即月球繞地球運(yùn)動(dòng),并且和地球一起繞太陽(yáng)運(yùn)動(dòng)。地球繞太陽(yáng)運(yùn)動(dòng)和地球一起繞太陽(yáng)運(yùn)動(dòng)。地球繞太陽(yáng)運(yùn)動(dòng)10圈圈后暫停后暫停。配套源代碼
58、例12-1 程序如下:from tkinter import *w=Tk() #創(chuàng)建主窗口w.title(繪制四個(gè)正方形)c=Canvas(w,width=300,height=220,bg=white) #創(chuàng)建畫布對(duì)象c.pack() #使畫布可見(jiàn)c.create_rectangle(110,110,190,190,fill=green, outline=green,width=5) #繪制無(wú)邊框綠色正方形c.create_rectangle(110,30,190,110,fill=#ff0000, stipple=gray25) #繪制紅色點(diǎn)畫正方形c.create_rectangle(3
59、0,110,110,190,fill=yellow, outline=red,width=5) #繪制紅色邊框黃色正方形c.create_rectangle(190,110,270,190,dash=10,width=5, fill=red) #繪制虛線邊框紅色正方形配套源代碼例12-2 程序如下:from math import *from tkinter import *w=Tk()w.title(繪制曲線)c=Canvas(w,width=300,height=200,bg=white)c.pack()#繪制函數(shù)曲線t=0while t=10*pi: x=3*(cos(t)+t*sin(
60、t) y=3*(sin(t)-t*cos(t) x+=150 #移動(dòng)坐標(biāo) y+=100 c.create_rectangle(x,y,x+0.5,y+0.5) t+=0.1配套源代碼例12-3 程序如下:from tkinter import *w=Tk()w.title(繪制圓和橢圓)c=Canvas(w,width=260,height=260,bg=white) #創(chuàng)建畫布對(duì)象c.pack()c.create_oval(30,30,230,230,fill=red,width=2) #繪制紅色圓c.create_oval(30,80,230,180,fill=yellow,width=2
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024二建《管理》口袋書
- 一年級(jí)數(shù)學(xué)第一學(xué)期滬教版- 期末試卷 2
- 2024-2025學(xué)年初中同步測(cè)控優(yōu)化設(shè)計(jì)物理八年級(jí)下冊(cè)配人教版第7章 第1節(jié) 力含答案
- 西京學(xué)院《語(yǔ)文教學(xué)理論與實(shí)踐》2021-2022學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《數(shù)字化環(huán)境及數(shù)字化建筑表現(xiàn)》2022-2023學(xué)年第一學(xué)期期末試卷
- 英語(yǔ)埃及艷后
- 西京學(xué)院《監(jiān)理概論》2022-2023學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《廣告攝影與攝像》2021-2022學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《翻譯工作坊》2023-2024學(xué)年第一學(xué)期期末試卷
- 老王課件湘教版
- 推拉門安裝技術(shù)交底
- 八年級(jí)上學(xué)期期中考試主題班會(huì)課件
- 癌因性疲乏課件
- 中華人民共和國(guó)文物保護(hù)法學(xué)習(xí)課程PPT
- 弘揚(yáng)中華傳統(tǒng)文化主題班會(huì)-課件
- 三年級(jí)《道德與法治》上冊(cè)第一單元《 快樂(lè)學(xué)習(xí)》教學(xué)設(shè)計(jì)
- 中班健康《身體上的洞洞》課件
- 藥品公司經(jīng)營(yíng)范圍(46個(gè)范本)
- 張祖德版大學(xué)無(wú)機(jī)化學(xué)試題集及答案
- 2023年04月山東濟(jì)南市槐蔭區(qū)殘聯(lián)公開(kāi)招聘殘疾人工作“一專兩員”公開(kāi)招聘筆試參考題庫(kù)+答案解析
- 三角函數(shù)的概念說(shuō)課稿-高一上學(xué)期數(shù)學(xué)人教A版
評(píng)論
0/150
提交評(píng)論