Python語言程序設計(第二版) 課件 7 Python圖形繪制_第1頁
Python語言程序設計(第二版) 課件 7 Python圖形繪制_第2頁
Python語言程序設計(第二版) 課件 7 Python圖形繪制_第3頁
Python語言程序設計(第二版) 課件 7 Python圖形繪制_第4頁
Python語言程序設計(第二版) 課件 7 Python圖形繪制_第5頁
已閱讀5頁,還剩49頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Python圖形繪制圖形繪制Python有大量的圖形庫,包括Python自帶的標準圖形庫,如tkinter模塊中的畫布繪圖、在Tkinter圖形庫基礎上建立的graphics模塊,還有種類繁多的第三方圖形庫,如wxPython、PyGTK、PyQt、PySide等,通過它們可以進行圖形繪制操作。此外,Python內置的turtle繪圖模塊也具有基本的繪圖功能。Tkinter圖形庫概述Tkinter(Tkinterface,Tk接口)圖形庫是Tk圖形用戶界面工具包的Python接口。Tk是一種流行的跨平臺圖形用戶界面(GraphicalUserInterface,GUI)開發工具。Tkinter圖形庫通過定義一些類和函數,實現了一個在Python中使用Tk的編程接口。可以簡單地說,Tkinter圖形庫就是Python版的Tk。Tkinter圖形庫概述Tkinter圖形庫由_tkinter、tkinter和tkinter.constants等若干模塊組成。其中,_tkinter是二進制擴展模塊,tkinter是主模塊,tkinterconstants模塊定義了許多常量。_tkinter模塊提供了對Tk的低級接口。低級接口并不會被應用級程序員直接使用,通常是一個共享庫或DLL,但是在一些情況下,它也可被Python解釋器靜態鏈接。tkinter是最重要的模塊,導入tkinter模塊時,會自動導入tkinter.constants模塊。因此,圖形處理首先需要做的是導入tkinter模塊,就像導入math模塊以使用其中的數學函數、導入string模塊以使用其中的字符串操作函數一樣。Tkinter圖形庫概述導入tkinter模塊一般采用以下兩種方法。>>>importtkinter>>>fromtkinterimport*主窗口的創建主窗口也稱為根窗口,這是一個頂層窗口,所有圖形都是在這個窗口中繪制的。在導入tkinter模塊之后,接下來就要使用Tk類的無參構造函數Tk()創建主窗口。主窗口是一個對象,其創建格式為:窗口對象名=Tk()主窗口的創建例如,下列語句創建主窗口w,這時可以在屏幕上看到一個主窗口。>>>w=Tk()主窗口有自己的屬性,如寬度(widh)、高度(height)、背景顏色(bg或background)等,也有自己的方法。主窗口的默認寬度和高度都為200像素、背景顏色顏色為淺灰色,下列語句設置w主窗口的寬度、高度和背景顏色屬性。>>>w['width']=300>>>w['height']=200>>>w['bg']='red'主窗口的創建主窗口默認的窗口標題是tk,可以通過調用主窗口對象的title()方法來設置窗口標題。下列語句設置w主窗口的標題為“tkinter主窗口”。>>>w.title('tkinter主窗口')畫布對象的創建畫布(canvas)就是用來進行繪圖的區域,tkinter模塊的繪圖操作都是通過畫布進行的。畫布實際上是一個對象,可以在畫布上繪制各種圖形、標注文本。畫布對象包含一些屬性,如畫布的高度、寬度、背景色等,也包含一些方法,如在畫布上創建圖形、刪除或移動圖形等。畫布對象的創建創建畫布對象語句的格式如下:畫布對象名=canvas(窗口對象名,屬性名=屬性值,......)該語句創建一個畫布對象,并對該對象的屬性進行設置。語句中的Canvas代表tkinter模塊提供的Canvas類,通過Canvas類的構造函數Canvas創建畫布對象。“窗口對象名”表示畫布所在的窗口,“屬性名=屬性值”用于設置畫布對象的屬性。畫布對象的創建畫布對象的常用屬性有畫布高度(height)、畫布寬度(width)和畫布背景色(bg或background)等,需要在創建畫布對象時進行設置。創建畫布對象時如果不設置這些屬性的值,則各屬性取各自的默認值,如bg的默認值為淺灰色。下面的語句在主窗口w中創建一個寬度為300像素、高度為200像素、背景為白色的畫布對象,并將畫布對象命名為c。>>>c=Canvas(w,width=300,height=200,bg='white')>>>c.pack()畫布對象的坐標系為了在繪圖時指定圖形的繪制位置,tkinter模塊為畫布建立了坐標系。畫布坐標系以畫布左上角為原點,從原點水平向右為x軸,從原點垂直向下為y軸。如果畫布坐標以整數給出,則度量單位是像素,例如左上角的坐標為原點(0,0),300×200畫布的右下角坐標為(299,199)。像素是最基本、最常用的長度單位。tkinter模塊也支持以字符串形式給出其他度量單位的長度值,例如5c表示5厘米、50m表示50毫米、2i表示2英寸等。畫布對象繪圖方法畫布對象提供了各種方法,利用這些方法可以在畫布上繪制各種圖形。繪制圖形前,先要導入tkinter模塊、創建主窗口、創建畫布并使畫布可見。相關的語句匯總如下。fromtkinterimport*w=Tk()c=Canvas(w,width=300,height=200,bg="white")c.pack()繪制矩形創建矩形畫布對象提供create_rectangle()方法,用于在畫布上創建矩形,其調用格式如下:畫布對象名.create_rectangle(x0,y0,x1,y1,屬性設置...)其中,(x0,y0)是矩形左上角的坐標,(x1,y1)是矩形右下角的坐標。屬性設置即對矩形的屬性進行設置。例如,下面的語句創建一個以(50,30)為左上角、以(200,150)為右下角的矩形。>>>c.create_rectangle(50,30,200,150)1繪制矩形2.矩形對象的常用屬性矩形邊框屬性outline設置顏色width邊框的寬度dash邊框虛線形式(2)矩形內部填充屬性fill設置填充顏色stipple在填充顏色時,用stipple屬性設置填充畫刷,即填充的點刻效果。state用于設置圖形的顯示狀態。繪制矩形可以利用畫布對象的itemconfig()方法來設置矩形屬性,利用delete()方法和move()方法可以刪除和移動矩形。下面再看兩個設置矩形屬性的語句。>>>c.itemconfig(1,fill="blue")>>>c.itemconfig(r,fill="grey",outline="white",width=5)例

繪制如圖所示的四個正方形。分析:利用畫布的create_rectangle方法繪制正方形,注意設置屬性和四個正方形之間的位置關系。程序如下:fromtkinterimport*w=Tk() #創建主窗口w.title("繪制四個正方形")#創建畫布對象c=Canvas(w,width=300,height=220,bg="white") #使畫布可見c.pack()#繪制無邊框綠色正方形c.create_rectangle(110,110,190,190,fill="green",outline="green",width=5)#繪制紅色點畫正方形c.create_rectangle(110,30,190,110,fill="#ff0000",stipple="gray25")#繪制紅色邊框黃色正方形c.create_rectangle(30,110,110,190,fill="yellow",outline="red",width=5)#繪制虛線邊框紅色正方形c.create_rectangle(190,110,270,190,dash=10,width=5,fill="red")例

繪制曲線分析:繪制函數曲線可采用計算出函數曲線的各個點的坐標,將各點畫出來,如果這些點足夠密,繪出的曲線會比較光滑。畫布對像沒有提供畫“點”的方法,但可以畫一個很小的矩形來作為點。例如:c.create_rectangle(50,50,51,51)。程序如下:frommathimport*fromtkinterimport*w=Tk()w.title("繪制曲線")c=Canvas(w,width=300,height=200,bg="white")c.pack()#繪制函數曲線t=0whilet<=10*pi:x=3*(cos(t)+t*sin(t))y=3*(sin(t)-t*cos(t))x+=150 #移動坐標

y+=100

c.create_rectangle(x,y,x+0.5,y+0.5)t+=0.1繪制矩形3.矩形對象的坐標表示create_rectangle()方法中坐標參數的形式是很靈活的,既可以直接提供坐標值,也可以先將坐標數據存入變量,然后將該變量傳給該方法;既可以將所有坐標數據構成一個元組,也可以將它們組成多個元組。>>>p1=(10,10)>>>p2=(150,100)>>>c.create_rectangle(p1,p2)>>>pp=(50,60,100,150)>>>c.create_rectangle(pp)繪制橢圓與圓弧繪制橢圓畫布對象提供create_oval()方法,用于在畫布上畫一個橢圓,其特例是圓。橢圓的位置和尺寸由其外接矩形決定,而外接矩形由左上角坐標(x0,y0)和右下角坐標(x1,y1)定義。create_oval()方法的調用格式如下:畫布對象名.create_oval(x0,y0,x1,y1,屬性設置,...)繪制橢圓與圓弧例

創建如圖所示的圓和橢圓。分析:利用畫布的create_oval()方法繪制一個圓和兩個橢圓,注意設置屬性和三個圖形之間的位置關系。程序如下:fromtkinterimport*w=Tk()w.title("繪制圓和橢圓")c=Canvas(w,width=260,height=260,bg="white")c.pack()c.create_oval(30,30,230,230,fill="red",width=2)c.create_oval(30,80,230,180,fill="yellow",width=2) #繪制黃色橢圓c.create_oval(80,30,180,230,fill="gray",width=2)繪制橢圓與圓弧例

描繪地球繞太陽旋轉的軌道。分析:分別創建一個橢圓和兩個圓,并且為大圓形涂上紅色表示太陽,為小圓形涂上藍色表示地球。程序如下:fromtkinterimport*w=Tk()w.title("繪制地球繞太陽旋轉軌道")c=Canvas(w,width=300,height=200,bg="white")c.pack()c.create_oval(50,50,250,150,dash=(4,2),width=2)#繪制太陽c.create_oval(110,80,150,120,fill="red",outline="red")c.create_oval(240,95,255,110,fill="blue") #繪制地球繪制橢圓與圓弧2.繪制圓弧畫布對象提供create_arc()方法,用于在畫布上創建一個弧形。與橢圓的繪制類似,create_arc()的參數是用來定義一個矩形的左上角和右下角的坐標,該矩形惟一確定了一個內接橢圓(特例是圓),而最終要畫的弧形是該橢圓的一段。create_arc()方法的調用格式如下:畫布對象名.create_arc(x0,y0,x1,y1,屬性設置,...)繪制橢圓與圓弧弧形的開始位置由屬性start定義,其值為一個角度(x軸方向為0°);弧形的結束位置由屬性extent定義,其值表示從開始位置逆時針旋轉的角度。start屬性的默認值為0°,extent屬性的默認值為90°。顯然,如果start設置為0°,extent設置為360°,則畫出一個完整的橢圓,效果和create_oval()方法一樣。屬性style用于規定圓弧的樣式,可以取三種值:PIESLICE是扇形,即圓弧兩端與圓心相連;ARC是弧,即圓周上的一段;CHORD是弓形,即弧加連接弧兩端的弦。繪制橢圓與圓弧看下面的程序:fromtkinterimport*w=Tk()w.title("圓弧的三種樣式")c=Canvas(w,width=350,height=150,bg="white")c.pack()c.create_arc(20,40,100,120,width=2)#默認樣式是PIESLICEc.create_arc(120,40,200,120,style=CHORD,width=2)c.create_arc(220,40,300,120,style=ARC,width=2)繪制橢圓與圓弧例

創建如圖所示的扇葉圖形。程序如下:fromtkinterimport*w=Tk()w.title("繪制扇葉圖形")c=Canvas(w,width=300,height=240,bg="white")c.pack()foriinrange(0,360,60):

c.create_arc(50,20,250,220,fill="red",start=i,extent=30)繪制線條與多邊形繪制線條畫布對象提供create_line()方法,用于在畫布上創建連接多個點的線段序列,其調用格式如下:畫布對象名.create_line(x0,y0,x1,y1,…,xn,yn,屬性設置,…)create_line()方法將各點(x0,y0),(x1,y1),…,(xn,yn)按順序用線條連接起來。例

繪制y=sin(x)*sin(4πx)曲線程序如下:frommathimport*fromtkinterimport*w=Tk()w.title("繪制曲線")W=400;H=220O_X=2;O_Y=H/2S_X=120;S_Y=100 #x,y軸縮放倍數x0=y0=0 #坐標初始值c=Canvas(w,width=W,height=H,bg="white")c.pack()c.create_line(0,O_Y,W,O_Y)#繪制x軸c.create_line(O_X,0,O_X,H) #繪制y軸foriinrange(0,180,1):arc=pi*i/180x=O_X+arc*S_Xy=O_Y-sin(arc)*sin(4*pi*arc)*S_Y

c.create_line(x0,y0,x,y)

x0=x

y0=y繪制線條與多邊形2.繪制多邊形畫布對象提供create_polygon()方法,用于在畫布上創建一個多邊形。與線條類似,多邊形是用一系列頂點(至少三個)的坐標定義的,系統將把這些頂點按次序連接起來。與線條不同的是,最后一個頂點需要與第一個頂點連接,從而形成封閉的形狀。create_polygon()方法的調用格式如下:畫布對象名.create_polygon(x0,y0,x1,y1,...,屬性設置,...)例用紅、黃、綠三種顏色填充矩形,如圖所示。分析:先畫矩形,再用紅、黃、綠三種顏色分別繪制三角形、平行四邊形和三角形,三個圖形連在一起填充矩形。程序如下:fromtkinterimport*w=Tk()w.title("三種顏色填充矩形")c=Canvas(w,width=340,height=200,bg="white")c.pack()c.create_rectangle(50,50,290,150,width=5)#繪制矩形c.create_polygon(50,50,50,150,130,150,fill="red") #繪制紅色三角形c.create_polygon(50,50,130,150,290,150,210,50,fill="yellow") #繪制黃色平行四邊形c.create_polygon(210,50,290,150,290,50,fill="green") #繪制綠色三角形turtle繪圖turtle繪圖模塊是Python中引入的一個簡單的繪圖工具,利用turtle模塊繪圖通常稱為海龜繪圖。為什么叫海龜繪圖呢?繪圖時有一個箭頭(比作小海龜),按照命令一筆一筆地畫出圖形,就像小海龜在屏幕上爬行,并能留下爬行的足跡,于是就形成了圖形。海龜就仿佛是繪圖的畫筆,而屏幕就是用于繪圖的紙張。turtle繪圖導入turtle模塊使用turtle繪圖,首先需要導入turtle模塊,有以下兩種方法。>>>importturtle>>>fromturtleimport*turtle繪圖2.turtle繪圖屬性turtle繪圖有三個要素,分別是位置、方向和畫筆。(1)位置是指箭頭在turtle圖形窗口中的位置。turtle圖形窗口的坐標系采用笛卡兒坐標系,即以窗口中心點為原點向右為x軸正軸方向,向上為y軸正軸方向。在turtle模塊中,reset()函數可使箭頭回到坐標原點。(2)方向是指箭頭的指向,使用left(degree)、right(degree)函數使得箭頭分別向左、向右旋轉degree度。(3)畫筆是指繪制的線條的顏色和寬度,有關畫筆控制函數如下:down():放下畫筆,移動時繪制圖形。這也是默認的狀態。up():提起畫筆,移動時不繪制圖形。width(w):繪制圖形時畫筆的寬度,w為一個正數。color(s):繪制圖形時畫筆的顏色,s是一個字符串,例如"red"、"blue"、"green"分別表示紅色、藍色、綠色。fillcolor(s):繪制圖形的填充顏色。turtle繪圖3.turtle繪圖命令turtle繪圖有許多控制箭頭運動的命令,從而繪制出各種圖形。goto(x,y):將箭頭從當前位置徑直移動到坐標為(x,y)的位置,這時當前方向不起作用,移動后方向也不改變。如果想要移動箭頭到(x,y)位置,但不要繪制圖形,可以使用up()函數。例如,下列命令繪制一根水平直線。fromturtleimport*reset() #將整個繪圖窗口清空并將箭頭置于原點(窗口的中心)。

goto(100,0) #從當前位置(0,0)運動到(100,0)位置forward(d):控制箭頭向前移動,其中d代表移動的距離。在移動前,需要設置箭頭的位置、方向和畫筆三個屬性。backward(d):與forward()函數相反,控制箭頭向后移動,其中d代表移動的距離。speed(v):控制箭頭移動的速度,v取[0,10]范圍的整數,數字越大,速度越快。也可以使用“slow”、“fast”來控制速度。turtle繪圖例

繪制一個正方形。程序如下:fromturtleimport*color("blue") #定義繪制時畫筆的顏色width(5) #定義繪制時畫筆的線條寬度speed(10) #定義繪圖的速度foriinrange(4): #繪出正方形的四條邊

forward(50)right(90)turtle繪圖例

繪制三個同心圓程序如下:fromturtleimport*foriinrange(3):up() #提起畫筆

goto(0,-50-i*50) #確定畫圓的起點

down() #放下畫筆

circle(50+i*50) #畫圓Graphics圖形庫Graphics圖形庫是在tkinter圖形庫基礎上建立的,由graphics模塊組成。graphics模塊的所有功能都是依賴于tkinter模塊功能實現的。graphics模塊將tkinter模塊的繪圖功能以面向對象的方式重新包裝,使初學者更容易學習和應用。Graphics圖形庫1.模塊導入與圖形窗口graphics模塊文件(graphics.py)可以從網站http://zelle/python下載,下載后將graphics.py文件與用戶自己的圖形程序放在一個目錄中,或者放在Python安裝目錄中即可。使用graphics繪圖,首先要導入graphics模塊,語句格式有如下兩種。>>>importgraphics>>>fromgraphicsimport*其次,使用graphics提供的GraphWin()函數創建一個圖形窗口。在圖形窗口中,設有標題欄,以及“最小化”、“最大化”、“關閉”等按鈕。例如:>>>win=GraphWin()。Graphics圖形庫2.圖形對象在tkinter模塊中,只為畫布提供了Canvas類,而畫布上繪制的各種圖形并沒有對應的類。因此,畫布是對象,而畫布的圖形并不是對象,不是按面向對象的風格構造的。graphics模塊就是為了改進這一點而設計的。在graphics模塊中,提供了GraphWin(圖形窗口)、Point(點)、Line(直線)、Circle(圓)、Oal(橢圓)、Rectangle(矩形)、Polygon(多邊形)、Text(文本)等類,利用類可以創建相應的圖形對象。每個對象都是相應的類的實例,對象都具有自己的屬性和方法(操作)。Graphics圖形庫(1)點graphics模塊提供了point類,用于在窗口中畫點。創建點對象的語句格式為:p=Point(x坐標,y坐標)下面先創建一個Point對象,然后調用Point對象的方法進行各種操作。>>>fromgraphicsimport*>>>win=GraphWin()>>>p=Point(100,50)>>>p.draw(win)>>>print(p.getX(),p.getY())10050>>>p.move(20,30)>>>print(p.getX(),p.getY())12080Graphics圖形庫Point對象還提供以下方法:p.setFill():設置點p的顏色。p.setOutline():設置邊框的顏色。對Point對象來說,與setFill()方法沒有區別。p.undraw():隨藏對象p,即在圖形窗口中,對象p變成不可見。注意,隱藏并非刪除,對象p仍然存在,隨時可以重新執行draw()。p.clone():復制一個與p一模一樣的對象。Graphics圖形庫(2)直線直線類Line用于繪制直線。創建直線對象的語句格式為:line=Line(端點1,端點2)其中,兩個端點都是Point對象。和Point對象一樣,Line對象也支持draw()、undrew()、move()、setFill()、setOutline()、clone()等方法。此外,Line對象還支持setArrow()方法,用于為直線畫箭頭,setWidth()方法用于設置直線寬度。Graphics圖形庫例

利用直線對象繪制一個正方形。程序如下:fromgraphicsimport*win=GraphWin("繪制正方形")p1=Point(50,50);p2=Point(150,50)p3=Point(150,150);p4=Point(50,150)l1=Line(p1,p2);l2=Line(p2,p3)l3=Line(p3,p4);l4=Line(p4,p1)l1.draw(win);l2.draw(win)l3.draw(win);l4.draw(win)p.getX(),p.getY())12080Graphics圖形庫(3)圓圓類為Circle,創建圓形對象的語句格式為:c=Circle(圓心,半徑)其中,圓心是Point對象,半徑是個數值。Circle對象同樣支持draw()、undraw()、setFill()、setOutline()、clone()、setWidth()等方法。此外,Circle對象還支持c.getRadius()方法,用于獲取圓形對象c的半徑。Graphics圖形庫例

繪制三個同心圓,并且將它們填充不同顏色。程序如下:fromgraphicsimport*win=GraphWin("繪制同心圓")pt=Point(100,100)cir1=Circle(pt,80)cir1.draw(win);cir1.setFill("green")cir2=Circle(pt,50)cir2.draw(win);cir2.setFill(color_rgb(100,100,255))cir3=Circle(pt,20)cir3.draw(win);cir3.setFill(color_rgb(255,0,0))Graphics圖形庫(4)橢圓橢圓類為Oval,創建橢圓對象的語句格式為:o=Oval(左上角,右下角)其中,左上角和右下角是兩個Point對象,用于指定一個矩形,再由這個矩形定義一個內接橢圓。例

繪制四個相扣的圓,并且將它們的邊線設置成不同顏色,邊線寬度相同。程序如下:fromgraphicsimport*win=GraphWin("繪制四個相扣的圓",410,200)pt1=Point(50,50);pt2=Point(150,150)o1=Oval(pt1,pt2);o1.draw(win)o1.setOutline("red");o1.setWidth(6)o2=o1.clone() #復制相同的圓對象o2.draw(win);o2.move(70,0);o2.setOutline("black");o2.setWidth(6)o3=o2.clone()o3.draw(win)

溫馨提示

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

評論

0/150

提交評論