《Python語(yǔ)言程序設(shè)計(jì)》 課件 第9章 圖形繪制_第1頁(yè)
《Python語(yǔ)言程序設(shè)計(jì)》 課件 第9章 圖形繪制_第2頁(yè)
《Python語(yǔ)言程序設(shè)計(jì)》 課件 第9章 圖形繪制_第3頁(yè)
《Python語(yǔ)言程序設(shè)計(jì)》 課件 第9章 圖形繪制_第4頁(yè)
《Python語(yǔ)言程序設(shè)計(jì)》 課件 第9章 圖形繪制_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第9章圖形繪制第9章

圖形繪制Tkinter概述畫(huà)布繪圖圖形的事件處理圖形繪制應(yīng)用舉例9.1Tkinter概述Tkinter是Python語(yǔ)言的標(biāo)準(zhǔn)GUI庫(kù),常被用于快速開(kāi)發(fā)小型圖形界面應(yīng)用程序。9.1.2使用Tkinter創(chuàng)建GUI程序的步驟(1)導(dǎo)入Tkinter模塊。importtkinter(導(dǎo)入tkinter模塊)importtkinterastk(導(dǎo)入tkinter模塊為tk)fromtkinterimport*(導(dǎo)入tkinter的所有內(nèi)容)(2)建立主窗口。 root=tkinter.Tk()

(5)綁定事件處理程序響應(yīng)用戶操作(如單擊按鈕)引發(fā)的

事件。(6)進(jìn)入事件循環(huán),等待用戶觸發(fā)事件響應(yīng)。root.mainiloop()(3)在主窗口中添加控件,如文本框、按鈕等。(4)調(diào)用控件的pack()、grid()、place()方法,通過(guò)幾何布局管理器調(diào)整并顯示其位置和大小。9.1.3Tkinter的主窗口Tkinter的主窗口也被稱為根窗體,是圖形化應(yīng)用程序的根容器,是Tkinter模塊底層控件的實(shí)例。在導(dǎo)入Tkinter模塊后,我們可以調(diào)用Tk()方法來(lái)初始化一個(gè)根窗體實(shí)例。window=Tk()例9-1

最簡(jiǎn)單的GUI程序示例。(1)在Python程序中導(dǎo)入Tkinter模塊。(2)創(chuàng)建窗體對(duì)象。(3)啟動(dòng)消息循環(huán)。fromtkinterimport*

frm_main=Tk()

frm_main.mainloop()2.裝飾界面屬性說(shuō)明舉例title(str)窗口標(biāo)題,str表示參數(shù)類型為字符串title(‘?dāng)?shù)據(jù)分析’〕iconbitmap(str)窗口左上角程序圖標(biāo)iconbitmap(".\\pic\\SUN.ICO")geometry(‘寬x高距左右邊距上下邊’)窗體的幾何尺寸及在屏幕中的位置,其中x不能少,距左邊用+右邊用-,距上邊用+下邊用-geometry(‘800x500+100+50’)resizable(b,b)窗體尺寸的可變性,b表示邏輯型resizable(0,0)(高寬都不可變)9.1.4畫(huà)布對(duì)象的創(chuàng)建畫(huà)布(canvas)是用來(lái)繪制圖形的區(qū)域,所有tkinter模塊中的圖形操作都是在畫(huà)布上完成的。(1)創(chuàng)建一個(gè)畫(huà)布對(duì)象畫(huà)布對(duì)象名=Canvas(窗口對(duì)象名,屬性名=屬性值,...)畫(huà)布對(duì)象的常用屬性:高度(height)、寬度(width)、背景色(bg或background)等。c=Canvas(w,width=300,height=200,bg='white')(2)

顯示畫(huà)布對(duì)象c.pack()(3)

可對(duì)畫(huà)布的屬性進(jìn)行設(shè)置c['bg']='green'9.1.5畫(huà)布中的圖形對(duì)象各種圖形對(duì)象的共性操作1.圖形對(duì)象的標(biāo)識(shí):采用標(biāo)識(shí)號(hào)和標(biāo)簽(tag)標(biāo)識(shí)號(hào)是在創(chuàng)建圖形對(duì)象時(shí)自動(dòng)為其賦予的唯一整數(shù)編號(hào)。為圖形對(duì)象指定標(biāo)簽的三種方法:(1)在創(chuàng)建圖形時(shí),利用tags屬性來(lái)指定標(biāo)簽。(2)創(chuàng)建圖形之后,可以利用畫(huà)布的itemconfig()方法對(duì)tags屬性進(jìn)行設(shè)置。(3)利用畫(huà)布的addtag_withtag()方法來(lái)為圖形對(duì)象添加新標(biāo)簽。例如:>>>id1=c.create_rectangle(10,10,100,50,tags="No1")>>>id2=c.create_rectangle(20,30,200,100,tags=("myRect","No2"))>>>c.itemconfig(id1,tags=("myRect","Rect1"))>>>c.addtag_withtag("ourRect","Rect1")注意:一個(gè)圖形對(duì)象可以與多個(gè)標(biāo)簽相關(guān)聯(lián),同樣一個(gè)標(biāo)簽可以與多個(gè)圖形對(duì)象相關(guān)聯(lián)。2.圖形對(duì)象的共性操作(1)gettags()方法:用于獲取給定圖形對(duì)象的所有標(biāo)簽。(2)find_withtag()方法:用于獲取與給定標(biāo)簽相關(guān)聯(lián)的所有圖形對(duì)象。(3)delete()方法:用于從畫(huà)布上刪除指定的圖形對(duì)象。(4)move()方法:用于在畫(huà)布上移動(dòng)指定圖形。>>>print(c.gettags(id1))('myRect','Rect1','ourRect')>>>print(c.find_withtag("Rect1"))>>>c.delete(id1)>>>c.move(id2,10,20)9.2畫(huà)布繪圖9.2.1繪制矩形方法:create_rectangle()

格式:r=畫(huà)布對(duì)象名.create_rectangle(x0,y0,x1,y1,屬性設(shè)置……)其中,(x0,y0)是矩形左上角的坐標(biāo),(x1,y1)是矩形右下角的坐標(biāo)。屬性設(shè)置即對(duì)矩形的屬性進(jìn)行設(shè)置。r保存圖形的標(biāo)識(shí)號(hào)。>>>r=c.create_rectangle(80,70,250,180,tags="Rect2")2.矩形對(duì)象的常用屬性(1)矩形邊框?qū)傩詏utline屬性:通過(guò)outline屬性可以設(shè)置矩形的邊框顏色,默認(rèn)值為黑色。width屬性:通過(guò)width屬性可以設(shè)置邊框的寬度,默認(rèn)值為1像素。dash屬性:通過(guò)dash屬性可以繪制邊框成虛線形式,該屬性的值是整數(shù)元組。例如二元組(a,b),其中a表示要畫(huà)多少個(gè)像素,b表示要跳過(guò)多少個(gè)像素。(2)矩形內(nèi)部填充屬性fill屬性:通過(guò)fill屬性可以設(shè)置矩形內(nèi)部區(qū)域的填充顏色,默認(rèn)值為空字符串,即透明的效果。stipple屬性:在填充顏色時(shí),可以使用stipple屬性設(shè)置填充畫(huà)刷,即填充的點(diǎn)刻效果,可以取gray12、gray25、gray50、gray75等值。state屬性:該屬性用于設(shè)置圖形的顯示狀態(tài),默認(rèn)值為NORMAL或normal,即正常顯示。9.2.2繪制橢圓與圓弧1.繪制橢圓畫(huà)布對(duì)象名.create_oval(x0,y0,x1,y1,屬性設(shè)置……)例9-3繪制如圖所示的圓和橢圓fromtkinterimport*w=Tk()w.title('繪制圓和橢圓')c=Canvas(w,width=260,height=260,bg='white')c.pack()c.create_oval(30,30,230,230,fill='black',width=2)c.create_oval(30,80,230,180,fill='green',width=2)c.create_oval(80,30,180,230,fill='white',width=2)2.繪制圓弧canvas.create_arc(x0,y0,x1,y1,屬性設(shè)置...)屬性start:定義弧形的開(kāi)始位置,其值為一個(gè)角度(x軸方向?yàn)?o)。默認(rèn)值為0o。屬性extent:定義弧形的結(jié)束位置,其值表示從開(kāi)始位置逆時(shí)針旋轉(zhuǎn)的角度。默認(rèn)值為90o。屬性style用于規(guī)定圓弧的樣式,可以取三種值:PIESLICE:扇形,即圓弧兩端與圓心相連,默認(rèn)值;ARC:弧,即圓周上的一段;CHORD:弓形,即弧加連接弧兩端的弦。fromtkinterimport*w=Tk()c=Canvas(w,width=350,height=200,bg="white")c.pack()c.create_arc(20,40,100,120,width=2)#默認(rèn)樣式是PIESLICEc.create_arc(120,40,200,120,style=CHORD,width=2)c.create_arc(220,40,300,120,style=ARC,width=2)例子:9.2.3顯示文本畫(huà)布對(duì)象名.create_text(x,y,屬性設(shè)置...)(x,y)指定文本顯示的參考位置text屬性:設(shè)置文本內(nèi)容,其值即為要顯示的字符串。anchor屬性:用于指定文本的哪個(gè)錨點(diǎn)與顯示位置(x,y)對(duì)齊。錨點(diǎn)可通過(guò)E(東)、S(南)、W(西)、N(北)、CENTER(中)、SE(東南)、SW(西南)、NW(西北)、NE(東北)等方位常量表示fill屬性用于設(shè)置文本的顏色,默認(rèn)值為黑色。justify屬性用于控制多行文本的對(duì)齊方式,其值可以是LEFT、CENTER或RIGHT,默認(rèn)為L(zhǎng)EFT。font屬性指定文本字體。例9-4

畫(huà)布文本顯示示例。fromtkinterimport*w=Tk()w.title('文本顯示')c=Canvas(w,width=400,height=200,bg="white")c.pack()c.create_rectangle(200,100,201,101,width=8)c.create_text(200,100,text="HelloPython1",\font=("宋體",15,"normal"),anchor=SE)c.create_text(200,100,text="HelloPython2",\font=("宋體",15,"normal"),anchor=SW)c.create_text(200,100,text="HelloPython3",\font=("宋體",15,"normal"),anchor=NE)c.create_text(200,100,text="HelloPython4",\font=("宋體",15,"normal"),anchor=NW)9.3圖形的事件處理“事件”(event)指在程序執(zhí)行過(guò)程中發(fā)生的操作。例如單擊鼠標(biāo)左鍵、按下鍵盤(pán)上的某個(gè)鍵等。某個(gè)對(duì)象可以與特定事件綁定在一起,這樣當(dāng)特定事件發(fā)生時(shí),可以調(diào)用特定的函數(shù)來(lái)處理該事件。1.事件綁定使用畫(huà)布對(duì)象的bind()方法或者tag_bind()方法。例如:

c.bind("<Button-1>",canvasF)將畫(huà)布對(duì)象與鼠標(biāo)左鍵單擊事件<Button-1>進(jìn)行了綁定。c.tag_bind(t,"<Enter>",textF1)將畫(huà)布上的文本對(duì)象t與鼠標(biāo)指針進(jìn)入事件<Enter>進(jìn)行了綁定。2.事件處理函數(shù)

對(duì)象與特定事件進(jìn)行綁定時(shí),需告訴系統(tǒng)當(dāng)對(duì)象發(fā)生了指定的事件后該如何處理的函數(shù)。例如:canvasF()函數(shù)用于處理畫(huà)布上的鼠標(biāo)左鍵單擊事件。功能是改變文本t的內(nèi)容,如果當(dāng)前內(nèi)容是"Python!"就變成"Programming!",如果當(dāng)前是"Programming!"就變成"Python!"。3.主窗口事件循環(huán)語(yǔ)句:w.mainloop()作用:進(jìn)入主窗口的事件循環(huán)。系統(tǒng)會(huì)自動(dòng)監(jiān)控在主窗口上發(fā)生的各種事件,并觸發(fā)相應(yīng)的處理函數(shù)。turtle(海龜)庫(kù)是turtle繪圖體系的Python實(shí)現(xiàn)

turtle繪圖體系:1969年誕生,主要用于程序設(shè)計(jì)入門(mén)Python語(yǔ)言的標(biāo)準(zhǔn)庫(kù)之一入門(mén)級(jí)的圖形繪制函數(shù)庫(kù)9.4turtle繪圖turtle的原理turtle(海龜)是一種真實(shí)的存在有一只海龜,其實(shí)在窗體正中心,在畫(huà)布上游走走過(guò)的軌跡形成了繪制的圖形海龜由程序控制,可以變換顏色、改變寬度等turtle.setup()函數(shù)格式:turtle.setup(width,height,startx,starty)作用:設(shè)置主窗體的大小和位置。width:窗口寬度height:窗口高度startx:窗口左側(cè)與屏幕左側(cè)的像素距離starty:窗口頂部與屏幕頂部的像素距離>>>turtle.setup(650,350,200,200)turtle的魅力#PythonDraw.pyimportturtleturtle.setup(650,350,200,200)turtle.penup()turtle.fd(-250)turtle.pendown()turtle.pensize(25)turtle.pencolor("purple")turtle.seth(-40)foriinrange(4):turtle.circle(40,80)turtle.circle(-40,80)turtle.circle(40,80/2)turtle.fd(40)turtle.circle(16,180)turtle.fd(40*2/3)turtle.done()1.導(dǎo)入turtle模塊使用turtle繪圖,首先需要導(dǎo)入turtle模塊,有以下兩種方法。>>>importturtle>>>fromturtleimport*importturtle函數(shù)調(diào)用時(shí)使用的語(yǔ)句格式是turtle.circle(10)fromturtleimport*函數(shù)調(diào)用時(shí)使用的語(yǔ)句格式是circle(10)importturtleast函數(shù)調(diào)用時(shí)使用的語(yǔ)句格式是t.circle(10)0102032.turtle繪圖屬性

turtle繪圖有三個(gè)要素,分別是位置、方向和畫(huà)筆。(1)位置是指箭頭在Turtle圖形窗口中的位置。(2)方向是指箭頭的指向,使用left(degree)、right(degree)函數(shù)使得箭頭分別向左、向右旋轉(zhuǎn)degree度。(3)畫(huà)筆是指繪制的線條的顏色和寬度。9.4.2畫(huà)筆控制函數(shù)1.turtle.penup()作用:抬起畫(huà)筆,之后移動(dòng)畫(huà)筆不繪制形狀。2.turtle.pendown()函數(shù)作用:落下畫(huà)筆,之后移動(dòng)畫(huà)筆將繪制形狀。3.turtle.pensize(width)函數(shù)作用:設(shè)置畫(huà)筆寬度,當(dāng)無(wú)參數(shù)輸入時(shí)返回當(dāng)前畫(huà)筆寬度。turtle.pensize(25)4.turtle.pencolor(colorstring)函數(shù)或turtle.pencolor((r,g,b))

作用:設(shè)置畫(huà)筆顏色,當(dāng)無(wú)參數(shù)輸入時(shí)返回當(dāng)前畫(huà)筆顏色。6.turtle.color(color1,color2)函數(shù)作用:同時(shí)設(shè)置pencolor=color1,fillcolor=color15.turtle.fillcolor(colorstring)函數(shù)作用:設(shè)置繪制圖形的填充顏色7.turtle.begin_fill()函數(shù)8.turtle.end_fill()函數(shù)作用:準(zhǔn)備開(kāi)始填充圖形作用:填充完成9.4.3形狀繪制函數(shù)1.turtle.fd(distance)函數(shù)或turtle.forward(distance)作用:向小海龜當(dāng)前行進(jìn)方向前進(jìn)distance距離;distance為負(fù)數(shù)時(shí)表示向相反方向前進(jìn)。>>>turtle.fd(40)2.backward(d):與forward()函數(shù)相反,控制箭頭向后移動(dòng),其中d代表移動(dòng)的距離。forward(d)backward(d)3.goto(x,y):將箭頭從當(dāng)前位置徑直移動(dòng)到坐標(biāo)為(x,y)的位置,移動(dòng)后方向也不改變。如果想要移動(dòng)箭頭到(x,y)處理,但不要繪制圖形,可以使用up()函數(shù)。例如,下列命令繪制一根水平直線。fromturtleimport*reset()#將整個(gè)繪圖窗口清空并將箭頭置于原點(diǎn)(窗口的中心)goto(100,0)#當(dāng)前位置(0,0)運(yùn)動(dòng)到(100,0)位置importturtleturtle.goto(100,100)turtle.goto(100,-100)turtle.goto(-100,-100)turtle.goto(-100,100)turtle.goto(0,0)絕對(duì)角度4.turtle.seth(to_angle)函數(shù)或turtle.setheading(to_angle)作用:設(shè)置小海龜當(dāng)前行進(jìn)方向?yàn)閠o_angle,該角度是絕對(duì)方向角度值。只改變方向但不行進(jìn)。

>>>turtle.seth(-40)turtle角度坐標(biāo)體系turtle.seth(45)turtle.seth(-135)5.turtle.left(angle)函數(shù)作用:順時(shí)針移動(dòng)angle度。該角度為相對(duì)角度。只改變方向不移動(dòng)。6.turtle.right(angle)函數(shù)作用:逆時(shí)針移動(dòng)angle度。該角度為相對(duì)角度。只改變方向不移動(dòng)。Turtle角度坐標(biāo)體系importturtleturtle.left(45)turtle.fd(150)turtle.right(135)turtle.fd(300)turtle.left(135)turtle.fd(150)7.turtle.circle(radius,extent=None)函數(shù)作用:根據(jù)半徑radius繪制extent角度的弧形。radius:弧形半徑,當(dāng)值為正數(shù)時(shí),半徑在小海龜左側(cè),

當(dāng)值為負(fù)數(shù)時(shí),半徑在小海龜右側(cè)。extent:繪制弧形的角度,當(dāng)不設(shè)置參數(shù)或參數(shù)設(shè)置為None 時(shí),繪制整個(gè)圓形。turtle.circle(100)turtle.circle(-100,90)例12-2繪制三個(gè)同心圓。程序如下:fromturtleimport*foriinrange(3):up()#提起畫(huà)筆goto(0,-50-i*50)#確定畫(huà)圓的起點(diǎn)down()#放下畫(huà)筆circle(50+i*50)#畫(huà)圓1、下列哪個(gè)選項(xiàng)能夠使用turtle庫(kù)繪制一個(gè)半圓形?(

)A.turtle.fd(100)B.turtle.circle(100)C.turtle.circle(100,90)D.turtle.circle(-100,180)2.turtle庫(kù)中控制顏色的函數(shù)是(

)。A.pensize()B.pendown()C.goto()D.pencolor()DD3、

下列程序運(yùn)行后,得到的圖形是(

)。fromturtleimport*goto(100,100)A.水平直線B.垂直直線

C.斜線D.只移動(dòng)坐標(biāo)不做圖4、turtle庫(kù)中控制順時(shí)針轉(zhuǎn)的函數(shù)是()。A.pendown()B.left()C.right()D.pencolor()CC例12-1繪制一個(gè)正方形。程序如下:fromturtleimport*color("blue")#定義繪制時(shí)畫(huà)筆的顏色pensize(5)#定義繪制時(shí)畫(huà)筆的線條寬度speed(10)#定義繪圖的速度f(wàn)oriinrange(4):#繪出正方形的四條邊f(xié)orward(100)right(90)使用turtle庫(kù),繪制一個(gè)正方形。請(qǐng)完成以下程序。importturtleastt.pensize(3)foriinrange(4):t.fd(100)_______t.left(90)使用turtle庫(kù),繪制一個(gè)疊邊形,其中,疊邊形內(nèi)角為100度。請(qǐng)完成以下程序。importturtleastt.pensize(2)foriinrange(9):t.fd(180)_______t.right(80)使用turtle庫(kù),繪制一個(gè)六邊形。請(qǐng)完成以下程序。importturtleastt.pensize(3)for________:t.fd(100)t.left(60)iinrange(6)使用turtle庫(kù),繪制一個(gè)邊長(zhǎng)為40像素的十二邊形。請(qǐng)完成以下程序。importturtleturtle.pensize(2)d=0for______:turtle.fd(40)d+=30turtle.seth(d)iinrange(12)例

使用turtle庫(kù),繪制一個(gè)六瓣花。程序如下:fromturtleimport*x=50foriinrange(6):circle(x,240)left(60)例12-5使用turtle庫(kù)繪制紅色五角形。程序如下:fromturtleimport*pencolor("red")goto(-100,50)pendown()color("red")begin_fill()foriinrange(5): forward(200) right(144)end_fill()

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論