《Python編程基礎(chǔ)》課件-第8章 Python標(biāo)準(zhǔn)庫_第1頁
《Python編程基礎(chǔ)》課件-第8章 Python標(biāo)準(zhǔn)庫_第2頁
《Python編程基礎(chǔ)》課件-第8章 Python標(biāo)準(zhǔn)庫_第3頁
《Python編程基礎(chǔ)》課件-第8章 Python標(biāo)準(zhǔn)庫_第4頁
《Python編程基礎(chǔ)》課件-第8章 Python標(biāo)準(zhǔn)庫_第5頁
已閱讀5頁,還剩139頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Python3基礎(chǔ)教程第2版慕課版第8章Python標(biāo)準(zhǔn)庫本章主要內(nèi)容:繪圖工具:turtle庫隨機數(shù)工具:random庫時間處理工具:time庫圖形用戶界面工具:Tkinter庫8.1繪圖工具:turtle庫本節(jié)主要內(nèi)容:窗體函數(shù)畫筆控制函數(shù)畫筆運動函數(shù)形狀函數(shù)輸入輸出函數(shù)事件處理相關(guān)函數(shù)8.1.1turtle庫的基本概念turtle庫(也稱海龜繪圖庫)提供了基本繪圖功能,它起源于1969年誕生的Logo語言。turtle庫提供了簡單、直觀的繪圖方法,Python接納了turtle庫,并將其作為標(biāo)準(zhǔn)庫提供給用戶。turtle庫的文件為turtle.py,其位于Python安裝目錄下的“Lib”子目錄中。繪圖之前,應(yīng)導(dǎo)入turtle模塊。例如:fromturtleimport*turtle庫在圖形窗口(也稱畫布)中完成繪圖繪圖窗口的標(biāo)準(zhǔn)坐標(biāo)系如圖所示turtle庫通過畫筆在畫布中的移動完成繪圖。turtle庫提供面向過程和面向?qū)ο髢煞N接口。面向過程接口直接調(diào)用turtle庫中函數(shù)進行繪圖。面向?qū)ο蠼涌谔峁┫旅娴念?。TurtleScreen類:定義繪圖窗口,其構(gòu)造器需要一個tkinter.Canvas對象或ScrolledCanvas對象作為參數(shù)??烧{(diào)用Screen()函數(shù)返回一個TurtleScreen類的單例對象。單例對象指如果已經(jīng)有一個TurtleScreen對象存在,則返回該對象,否則創(chuàng)建一個新的TurtleScreen對象并返回。TurtleScreen類基于Tkinter庫實現(xiàn)繪圖窗口。RawTurtle類:別名為RawPen,用于定義在TurtleScreen上繪圖的海龜對象(也可稱為畫筆)。RawTurtle類的構(gòu)造器需要一個Canvas、ScrolledCanvas或TurtleScreen作為參數(shù)。面向?qū)ο蠼涌陬惖乃蟹椒ù嬖谕暮瘮?shù),這些函數(shù)作為面向過程接口的組成部分。導(dǎo)入turtle庫后,直接調(diào)用函數(shù)完成繪圖就是使用面向過程接口。turtle庫的面向過程接口主要包括窗體函數(shù)、畫筆控制函數(shù)、畫筆運動函數(shù)、形狀函數(shù)、輸入輸出以及事件處理函數(shù)等。所有函數(shù)的第一個參數(shù)默認(rèn)為self,在介紹各個函數(shù)時省略該參數(shù)。8.1.2窗體函數(shù)1.turtle.bye()關(guān)閉繪圖窗口,示例代碼如下。turtle.bye()2.turtle.exitonclick()單擊時關(guān)閉繪圖窗口,示例代碼如下。turtle.exitonclick()3.turtle.setup(width,height,startx,starty)設(shè)置繪圖主窗口的大小和位置。各參數(shù)作用如下。width:整數(shù)表示窗口寬度為多少像素;浮點數(shù)表示窗口寬度占屏幕的百分比(默認(rèn)50%)。height:整數(shù)表示窗口高度為多少像素;浮點數(shù)表示窗口高度占屏幕的百分比(默認(rèn)75%)。startx:正數(shù)表示窗口位置距離屏幕左邊緣多少像素,負(fù)數(shù)表示距離屏幕右邊緣的像素數(shù),None(默認(rèn)值)表示窗口水平居中。starty:正數(shù)表示窗口位置距離屏幕上邊緣多少像素,負(fù)數(shù)表示距離屏幕下邊緣的像素數(shù),None(默認(rèn)值)表示窗口垂直居中。示例代碼如下。>>>turtle.setup(200,180,0,0) #窗口大小200*180,位置在屏幕左上角>>>turtle.setup(0.5,0.6) #窗口寬為屏幕50%,高為屏幕60%,位置在屏幕中央4.turtle.screensize(canvwidth,canvheight,bg)設(shè)置繪圖窗口中畫布的大小,無參數(shù)時返回畫布大小。各參數(shù)的作用如下。canvwidth:正整型數(shù),以像素表示畫布的新寬度值。canvheight:正整型數(shù),以像素表示畫面的新高度值。bg:顏色字符串,新的背景顏色。示例代碼如下。>>>turtle.screensize(300,400)>>>turtle.screensize()(300,400)turtle庫中使用的顏色有3種表示方法。顏色名稱字符串:red、blue、yellow等。十六進制顏色值字符串:#FF0000、#00FF00、#FFFF00等。RGB顏色元組:顏色元組格式為(r,g,b),r、g、b的取值范圍為0~colormode。colormode為顏色模式,取值為1或255。turtle.colormode(n)函數(shù)設(shè)置顏色模式(n取值1或255)。例如:顏色模式為255:(255,0,0)、(0,210,0)、(155,215,0)等是有效的顏色元組顏色模式為1時:(1,0,0)、(0,0.3,0)、(1,0.5,0)等是有效的顏色元組。示例代碼如下。>>>turtle.screensize(300,400,'yellow')5.turtle.bgcolor(*args)設(shè)置背景顏色,無參數(shù)時返回當(dāng)前背景顏色。參數(shù)args是一個顏色字符串或顏色元組,或者是3個取值范圍為0~colormode內(nèi)的數(shù)值(即省略圓括號的顏色元組)。示例代碼如下。>>>turtle.bgcolor((0.5,0,0))>>>turtle.bgcolor()(0.5019607843137255,0.0,0.0)>>>turtle.bgcolor('red')>>>turtle.bgcolor()'red'>>>turtle.bgcolor(0.6,0.3,0.7)6.turtle.bgpic(picname=None)設(shè)置背景圖片或返回當(dāng)前背景圖片名稱。如果picname為一個以gif或png為后綴名的圖片文件名,則將相應(yīng)圖片設(shè)為背景。如果picname為“nopic”,則刪除當(dāng)前背景圖片。未提供參數(shù)時返回當(dāng)前背景圖片文件名。示例代碼如下。>>>turtle.bgpic()'nopic'>>>turtle.bgpic('back.png')7.turtle.clear()和turtle.clearscreen()從繪圖窗口中刪除全部繪圖,將繪圖窗口重置為初始狀態(tài):白色背景無背景圖片無事件綁定并啟用追蹤。示例代碼如下。>>>turtle.clear()>>>turtle.clearscreen()8.turtle.reset()和turtle.resetscreen()將繪圖窗口中的畫筆重置為初始狀態(tài),示例代碼如下。>>>turtle.reset()>>>turtle.resetscreen()9.turtle.window_height()和turtle.window_width()返回繪圖窗口的高度和高度,示例代碼如下。>>>turtle.window_height() 576>>>turtle.window_width()6838.1.3畫筆控制函數(shù)1.turtle.pendown()、turtle.pd()和turtle.down()畫筆落下,移動畫筆時畫線,示例代碼如下。>>>turtle.pendown()2.turtle.penup()、turtle.pu()和turtle.up()畫筆抬起,移動畫筆時不畫線,示例代碼如下。>>>turtle.penup()3.turtle.pensize(width=None)和turtle.width(width=None)參數(shù)with為一個正數(shù)。提供參數(shù)with時,將其設(shè)置為畫筆大小,畫筆大小決定線條粗細(xì)。如未指定參數(shù),則返回畫筆的當(dāng)前大小。示例代碼如下。>>>turtle.pensize()1>>>turtle.pensize(5)4.turtle.pen(pen=None,**pendict)提供參數(shù)時設(shè)置畫筆屬性;未指定參數(shù)時返回畫筆屬性。參數(shù)pen為字典。pendict為一個或多個關(guān)鍵字參數(shù),可用的關(guān)鍵字及其取值如下。shown:值為True(顯示畫筆形狀)或False(不顯示畫筆形狀)。pendown:值為True(畫筆落下)或False(畫筆抬起)。pencolor:值為顏色字符串或顏色元組,用于設(shè)置畫筆顏色。fillcolor:值為顏色字符串或顏色元組,用于設(shè)置填充顏色。pensize:值為正數(shù),用于設(shè)置畫筆大小。speed:值為0~10范圍內(nèi)的數(shù),用于設(shè)置繪圖速度。resizemode:值為“auto”“user”或“noresize”,用于設(shè)置繪圖窗口大小調(diào)整模式。stretchfactor:值為“(正數(shù)值,正數(shù)值)”格式的元組,用于設(shè)置畫筆裁剪比例。outline:值為正數(shù),用于設(shè)置輪廓寬度。tilt:值為整數(shù)或小數(shù),用于設(shè)置畫筆傾斜角度。示例代碼如下。>>>turtle.pen(fillcolor="yellow",pensize=5) #設(shè)置關(guān)鍵字參數(shù)>>>turtle.pen({'shown':False,'tilt':15}) #使用字典參數(shù)>>>turtle.pen(){'pencolor':'black','shown':False,'speed':3,'pendown':True,'shearfactor':0.0,'resizemode':'noresize','outline':1,'stretchfactor':(1.0,1.0),'tilt':15,'pensize':5,'fillcolor':'yellow'}5.turtle.isdown()畫筆落下時返回True,畫筆抬起時返回False,示例代碼如下。>>>turtle.penup()>>>turtle.isdown()False>>>turtle.pendown()>>>turtle.isdown()True6.turtle.pencolor(*args)提供參數(shù)時設(shè)置畫筆顏色,未提供參數(shù)時返回畫筆顏色,示例代碼如下。>>>colormode()1.0>>>turtle.pencolor()'red'>>>turtle.pencolor("blue")>>>turtle.pencolor()'blue'>>>turtle.pencolor((0.3,0.5,0.6))>>>turtle.pencolor('#FF00FF')7.turtle.fillcolor(*args)提供參數(shù)時設(shè)置填充顏色未提供參數(shù)時返回填充顏色示例代碼如下。>>>turtle.fillcolor("yellow")>>>turtle.fillcolor()'yellow'8.turtle.color(*args)提供兩個顏色參數(shù),分別設(shè)置為畫筆顏色和填充顏色;未提供參數(shù)時返回畫筆顏色和填充顏色。示例代碼如下。>>>turtle.color()('black','yellow')>>>turtle.color("red","green")9.turtle.filling()返回填充狀態(tài),要填充是返回True,不填充時返回False。10.turtle.begin_fill()開始填充,在繪制填充形狀之前調(diào)用。11.turtle.end_fill()結(jié)束填充,同時執(zhí)行填充操作,填充調(diào)用begin_fill()之后繪制的封閉形狀。12.turtle.clone()創(chuàng)建并返回畫筆的克隆體,克隆體具有與畫筆相同的位置、朝向和其他屬性??寺〉玫降漠嫻P可以設(shè)置與原畫筆不同的屬性,執(zhí)行不同的繪圖操作。示例代碼如下。>>>t2=turtle.clone()turtle允許使用多個畫筆,可調(diào)用Turtle()函數(shù)創(chuàng)建畫筆,示例代碼如下。>>>t3=turtle.Turtle()8.1.4畫筆運動函數(shù)1.turtle.forward(distance)和turtle.fd(distance)畫筆前進distance指定的距離,參數(shù)distance為像素值,不改變畫筆的朝向,示例代碼如下。>>>turtle.forward(50)2.turtle.back(distance)、turtle.bk(distance)和turtle.backward(distance)畫筆后退distance指定的距離,不改變畫筆的朝向,示例代碼如下。>>>turtle.backward(50)3.turtle.right(angle)和turtle.rt(angle)畫筆向右旋轉(zhuǎn)angle個單位,單位默認(rèn)為角度,可調(diào)用turtle.degrees()和turtle.radians()函數(shù)設(shè)置度量單位。角度的正負(fù)由畫筆模式確定,可調(diào)用turtle.mode()函數(shù)設(shè)置畫筆模式。函數(shù)turtle.degrees()將角度的度量單位設(shè)置為度,turtle.radians()將角度的度量單位設(shè)置為弧度。示例代碼如下。>>>turtle.degrees() #設(shè)置角度單位為度>>>turtle.heading() #畫筆當(dāng)前朝向0.0>>>turtle.right(60) #畫筆向右旋轉(zhuǎn)60度>>>turtle.heading()300.04.turtle.mode(mode=None)設(shè)置或返回畫筆模式(即畫布的坐標(biāo)系)參數(shù)mode為字符串“standard”“l(fā)ogo”或“world”?!皊tandard”模式與舊版本的turtle兼容,“l(fā)ogo”模式與大部分Logo畫筆繪圖兼容,“world”模式使用用戶自定義的“世界坐標(biāo)系”。模式、畫筆初始朝向和角度正負(fù)之間的關(guān)系如下。standard模式:畫筆初始朝右(東)、逆時針為角度正方向。logo模式:畫筆初始朝上(北)、順時針為角度正方向。示例代碼如下。>>>turtle.mode('logo')>>>turtle.heading()0.0>>>turtle.right(60)>>>turtle.heading()60.05.turtle.left(angle)和turtle.lt(angle)畫筆向左旋轉(zhuǎn)angle個單位,示例代碼如下。>>>turtle.left(45)6.turtle.goto(x,y=None)、turtle.setpos(x,y=None)和turtle.setposition(x,y=None)將畫筆移動到絕對坐標(biāo)的位置。如果畫筆已落下將畫直線。不改變畫筆的朝向。同時提供參數(shù)x和y時,(x,y)為新坐標(biāo)。省略參數(shù)y時,x為坐標(biāo)向量。示例代碼如下。>>>turtle.pos() #查看畫筆當(dāng)前位置(0.00,0.00)>>>turtle.goto(20,30) #移動畫筆到(20,30)>>>turtle.pos()(20.00,30.00)>>>turtle.goto((50,50)) #移動畫筆到(50,50)7.turtle.setx(x)畫筆水平移動,橫坐標(biāo)變?yōu)閤,縱坐標(biāo)保持不變,示例代碼如下。>>>turtle.pos()(50.00,50.00)>>>turtle.setx(100)>>>turtle.pos()(100.00,50.00)8.turtle.sety(y)畫筆垂直移動,橫坐標(biāo)不變,縱坐標(biāo)變?yōu)閥,示例代碼如下。>>>turtle.pos()(100.00,50.00)>>>turtle.sety(100)>>>turtle.pos()(100.00,100.00)9.turtle.setheading(to_angle)和turtle.seth(to_angle)將畫筆的方向設(shè)置為to_angle(注意由畫筆模式?jīng)Q定具體方向)示例代碼如下。>>>turtle.setheading(45)10.turtle.home()將畫筆移至初始坐標(biāo)(0,0),并設(shè)置方向為初始方向(由畫筆模式確定),示例代碼如下。>>>turtle.pos() #當(dāng)前位置(100.00,100.00)>>>turtle.heading() #當(dāng)前朝向15.0>>>turtle.home() #畫筆回歸原點,重置為初始朝向>>>turtle.heading()0.0>>>turtle.pos()(0.00,0.00)11.turtle.circle(radius,extent=None,steps=None)繪制一個半徑為radius的圓,圓心在畫筆左側(cè)radius個單位的位置。參數(shù)radius為數(shù)值,extent為數(shù)值或None,steps為整數(shù)或None。extent為一個角度,省略時繪制圓,指定extent參數(shù)時繪制指定角度的圓弧。繪制圓弧時,如果radius為正值,則沿逆時針方向繪制圓弧,否則沿順時針方向繪制圓弧。最終畫筆的朝向由extent的值決定。turtle庫實際上是用內(nèi)切正多邊形來近似表示圓,其邊的數(shù)量由steps指定。省略steps參數(shù)時自動確定邊數(shù)。此方法也可用來繪制正多邊形。示例代碼如下。>>>turtle.circle(50) #繪制半徑為50的圓>>>turtle.circle(100,180) #繪制半徑為100的半圓>>>turtle.circle(200,None,4) #繪制對角線長度為200的正方形>>>turtle.circle(200,steps=6) #繪制對角線長度為200的正六邊形12.turtle.dot(size=None,*color)繪制一個直徑為size,顏色為color的圓點。如果未指定size,則直徑取pensize+4和2*pensize中的較大值,示例代碼如下。>>>turtle.dot() #繪制默認(rèn)大小的點。>>>turtle.dot(100) #繪制直徑為100的點>>>turtle.dot(50,'red') #繪制直徑為50的點,顏色為紅色13.turtle.stamp()在畫筆當(dāng)前位置印制一個印章(畫筆形狀),返回該印章的stamp_id,示例代碼如下。>>>turtle.stamp()1914.turtle.clearstamp(stampid)刪除stampid指定的印章,stampid是調(diào)用stamp()的返回值,示例代碼如下。>>>turtle.clearstamp(19)15.turtle.clearstamps(n=None)參數(shù)n為整數(shù)或None。n為None則刪除全部印章,n>0則刪除前n個印章,n<0則刪除后n個印章,示例代碼如下。>>>turtle.clearstamps(5)16.turtle.undo()撤消最近的一個畫筆動作,可撤消的次數(shù)由撤消緩沖區(qū)的大小決定,示例代碼如下。>>>turtle.undo()17.turtle.speed(speed=None)設(shè)置畫筆的移動速度。不指定參數(shù)(或為None)時返回畫筆的移動速度。參數(shù)speed為0~10范圍內(nèi)的整數(shù)或速度字符串,除0以外的速度值越大繪圖速度越快(0表示沒有動畫效果)。可用的速度字符串與速度值的對應(yīng)關(guān)系如下。fastest:0,最快。fast:10,快。normal:6,正常。slow:3,慢。slowest:1,最慢。示例代碼如下。>>>turtle.speed()3>>>turtle.speed('fast')>>>turtle.speed()10>>>turtle.speed(6)18.turtle.position()和turtle.pos()返回畫筆當(dāng)前的坐標(biāo),示例代碼如下。>>>turtle.pos()(100.00,100.00)19.turtle.xcor()返回畫筆的x坐標(biāo)。20.turtle.ycor()返回畫筆的y坐標(biāo)。21.turtle.heading()返回畫筆的當(dāng)前朝向。22.turtle.distance(x,y=None)返回從畫筆位置到坐標(biāo)(x,y)或另一畫筆對應(yīng)位置的距離。參數(shù)x為畫筆對象時,y為None示例代碼如下。>>>turtle.home()>>>turtle.goto(100,100)>>>turtle.distance(0,0)141.42135623730958.1.5形狀函數(shù)1.turtle.getshapes()返回畫筆形狀列表,列表包含當(dāng)前可用的所有畫筆形狀的名稱,示例代碼如下。>>>turtle.getshapes()['arrow','blank','circle','classic','square','triangle','turtle']2.turtle.shape(name=None)將畫筆形狀設(shè)置為name指定的形狀,如未提供參數(shù)則返回當(dāng)前的畫筆形狀的名稱,示例代碼如下。>>>turtle.shape('turtle') #將畫筆設(shè)置為海龜形狀3.turtle.begin_poly()開始記錄多邊形的頂點,當(dāng)前畫筆位置為多邊形的第一個頂點。4.turtle.end_poly()停止記錄多邊形的頂點,當(dāng)前畫筆位置為多邊形的最后一個頂點,它將連線到第一個頂點。5.turtle.get_poly()返回最新記錄的多邊形,示例代碼如下。>>>turtle.begin_poly() #開始記錄>>>turtle.fd(50)>>>turtle.lt(60)>>>turtle.fd(50)>>>turtle.lt(60)>>>turtle.fd(50)>>>turtle.lt(60)>>>turtle.fd(50)>>>turtle.lt(60)>>>turtle.fd(50)>>>turtle.end_poly() #結(jié)束記錄正六邊形>>>p=turtle.get_poly() #返回剛記錄的多邊形>>>p((0.00,0.00),(50.00,0.00),(75.00,43.30),(50.00,86.60),(0.00,86.60),(-25.00,43.30))記錄的多邊形為頂點坐標(biāo)的元組。6.turtle.register_shape(name,shape=None)和turtle.addshape(name,shape=None)為畫筆注冊新的形狀。調(diào)用此函數(shù)有3種不同方式。參數(shù)name為形狀的注冊名稱,shape為記錄的多邊形示例代碼如下。

>>>turtle.register_shape('sixpoly',p) #將多邊形注冊為畫筆形狀>>>turtle.shape('sixpoly')

#使用多邊形作為畫筆形狀參數(shù)name為一個gif文件的文件名,參數(shù)shape為None或者省略時,將gif圖片注冊為畫筆形狀。gif文件應(yīng)放在程序相同的目錄中。在交互狀態(tài)下注冊gif文件時,gif文件應(yīng)放在當(dāng)前工作目錄。參數(shù)name中不能包含路徑示例代碼如下。>>>turtle.register_shape("star.gif")>>>turtle.getshapes()['arrow','blank','circle','classic','square','star.gif','triangle','turtle']>>>turtle.shape('star.gif') #使用已注冊的gif文件圖片作為畫筆形狀參數(shù)name為形狀的注冊名稱字符串,shape為坐標(biāo)元組示例代碼如下。>>>turtle.register_shape("myTri",((0,-5),(5,0),(0,5)))>>>turtle.getshapes()['arrow','blank','circle','classic','myTri','square','star.gif','triangle','turtle']7.使用復(fù)合形狀復(fù)合形狀由多個不同顏色的多邊形構(gòu)成。使用復(fù)合形狀包含下列步驟。創(chuàng)建一個類型為“compound”的Shape對象。調(diào)用addcomponent()方法為Shape對象添加多邊形。注冊Shape對象,并將其設(shè)置為畫筆形狀。示例代碼如下。>>>s=turtle.Shape("compound") #創(chuàng)建空的復(fù)合形狀對象>>>p=((0,0),(50,0),(50,50),(0,50)) #定義多邊形頂點>>>s.addcomponent(p,"red","blue") #將多邊形添加到復(fù)合形狀對象>>>p=((10,10),(40,10),(40,40),(10,40))>>>s.addcomponent(p,"blue","red")>>>p=((20,20),(30,20),(30,30),(20,30))>>>s.addcomponent(p,"red","blue")>>>turtle.register_shape("mycs",s) #注冊復(fù)合形狀對象>>>turtle.shape('mycs') #將復(fù)合形狀設(shè)置為畫筆形狀8.1.6輸入輸出函數(shù)1.turtle.write(arg,move=False,align="left",font=("Arial",8,"normal"))將對象arg輸出到畫筆位置。參數(shù)move為True時(默認(rèn)為False),畫筆會移動到文本的右下角。參數(shù)align指定文本對齊方式,可取值“l(fā)eft”“center”或“right”,對齊位置為畫筆當(dāng)前位置。參數(shù)font是一個三元組(fontname,fontsize,fonttype),用于指定字體名稱、字號和字體類型。參數(shù)font默認(rèn)為("Arial",8,"normal"),示例代碼如下。>>>turtle.home()>>>turtle.write((0.0))>>>turtle.write("Python",True,align="center")2.turtle.textinput(title,prompt)用對話框輸入字符串。參數(shù)title為對話框的標(biāo)題,prompt為提示信息。函數(shù)返回輸入的字符串,取消對話框時返回None,示例代碼如下。>>>turtle.textinput("Turtle繪圖","請輸入一個字符串")'Python編程'3.turtle.numinput(title,prompt,default=None,minval=None,maxval=None)用對話框輸入數(shù)值。參數(shù)title為對話框標(biāo)題,prompt為提示信息,default為輸入框初始值,minval為允許輸入的最小值,maxval為允許輸入的最大值。函數(shù)返回輸入的數(shù)值,取消對話框時返回None。示例代碼如下。>>>turtle.numinput("Turtle繪圖","請輸入一個數(shù)值",None,1,10)8.1.7事件處理相關(guān)函數(shù)1.turtle.mainloop()和turtle.done()開始事件循環(huán),調(diào)用Tkinter庫的mainloop()函數(shù),用于實現(xiàn)turtle繪圖窗口的交互功能。應(yīng)將turtle.mainloop()或turtle.done()作為一個繪圖程序的結(jié)束語句,否則其后的繪圖語句不會執(zhí)行示例代碼如下。>>>turtle.done()2.turtle.listen()使繪圖窗口獲得焦點,以便接收鍵盤和鼠標(biāo)事件。3.turtle.onkey(fun,key)和turtle.onkeyrelease(fun,key)注冊按鍵事件函數(shù),fun為函數(shù)名,在按下并釋放key指定的鍵時調(diào)用fun()函數(shù)。fun為None時刪除事件綁定。參數(shù)key為鍵字符串,例如“a”或“space”示例代碼如下。>>>deffun():...turtle.circle(50)...>>>turtle.onkey(fun,'a’)#注冊事件函數(shù),在釋放字母a鍵時,調(diào)用fun()函數(shù)>>>turtle.listen()4.turtle.onkeypress(fun,key=None)與turtle.onkey(fun,key)和turtle.onkeyrelease(fun,key)類似,注冊按鍵事件函數(shù),fun為函數(shù)名,在按下(未釋放)key指定的鍵時調(diào)用fun()函數(shù)。>>>deffun():...turtle.fd(50)...turtle.circle(45)...>>>turtle.onkeypress(fun,'b') #在按下鍵盤上的字母b鍵時,調(diào)用fun()函數(shù)>>>turtle.listen()注意,在onkey、onkeyrelease和onkeypress等事件發(fā)生后,Python執(zhí)行綁定的函數(shù)。在函數(shù)執(zhí)行過程中,如果發(fā)生其他事件,則會中斷正在執(zhí)行的函數(shù),轉(zhuǎn)去執(zhí)行其他事件的綁定函數(shù)。5.turtle.onclick(fun,btn=1,add=None)和turtle.onscreenclick(fun,btn=1,add=None)將函數(shù)fun()綁定到鼠標(biāo)單擊事件,fun為None時刪除現(xiàn)有的綁定。參數(shù)fun為函數(shù)名,調(diào)用時將傳入兩個參數(shù)表示鼠標(biāo)所在點的坐標(biāo)。參數(shù)btn為1(默認(rèn)值)時,表示鼠標(biāo)左鍵,2表示鼠標(biāo)中間鍵,3表示鼠標(biāo)右鍵。參數(shù)add為True時將添加一個新綁定,否則將取代先前的綁定。onclick()為畫筆綁定鼠標(biāo)單擊事件函數(shù)onscreenclick()為繪圖窗口綁定鼠標(biāo)單擊事件函數(shù)。示例代碼如下。>>>deffun(x,y):...turtle.goto(x,y)...turtle.circle(45)...>>>turtle.onscreenclick(fun) #單擊繪圖窗口時調(diào)用函數(shù)fun()>>>turtle.onclick(fun,3) #右鍵單擊畫筆時調(diào)用函數(shù)fun()6.turtle.onrelease(fun,btn=1,add=None)將函數(shù)fun()綁定到鼠標(biāo)釋放事件,與turtle.onclick()類似,示例代碼如下。>>>deffun(x,y):...turtle.circle(50)...>>>turtle.onrelease(fun,3) #在畫筆上按下并釋放鼠標(biāo)右鍵時調(diào)用函數(shù)fun()7.turtle.ondrag(fun,btn=1,add=None)將fun()函數(shù)綁定到畫筆的拖動事件。如果fun值為None,則移除現(xiàn)有的綁定。在拖動畫筆時,首先會觸發(fā)畫筆的鼠標(biāo)單擊事件示例代碼如下。>>>turtle.ondrag(turtle.goto) #拖動畫筆在繪圖窗口中手繪線條8.turtle.ontimer(fun,t=0)創(chuàng)建一個計時器,在t毫秒后調(diào)用fun()函數(shù)。fun是函數(shù)名稱,函數(shù)無參數(shù)示例代碼如下。>>>deff():...turtle.fd(100)...turtle.circle(50)...>>>turtle.ontimer(f) #立即執(zhí)行f()函數(shù)>>>turtle.ontimer(f,2000) #2秒后執(zhí)行f()函數(shù)8.1.8turtle繪圖實例8.2隨機數(shù)工具:random庫本節(jié)主要內(nèi)容:隨機數(shù)種子函數(shù)整數(shù)隨機數(shù)函數(shù)浮點數(shù)隨機數(shù)函數(shù)序列隨機函數(shù)8.2.1random庫概述random庫提供了隨機數(shù)生成函數(shù),其模塊文件為Python安裝目錄下的“Lib”子目錄中的random.py。各種程序設(shè)計語言中幾乎都提供了隨機數(shù)生成功能,通過程序獲得的隨機數(shù)稱為“偽隨機數(shù)”,并不能做到數(shù)學(xué)意義上的真正的“隨機”。程序設(shè)計語言通過偽隨機數(shù)生成器來獲得隨機數(shù)。Python的偽隨機數(shù)生成器采用應(yīng)用最為廣泛的馬特賽特旋轉(zhuǎn)(MersenneTwister)算法,它可以產(chǎn)生53位精度浮點數(shù),周期為219937-1,其在底層用C實現(xiàn)。random庫提供的函數(shù)主要包括隨機數(shù)種子函數(shù)、整數(shù)隨機數(shù)函數(shù)、浮點數(shù)隨機數(shù)函數(shù)和序列隨機函數(shù)。8.2.2隨機數(shù)種子函數(shù)隨機數(shù)種子函數(shù)的基本格式如下。random.seed(n=None,version=2)函數(shù)將參數(shù)n設(shè)置為隨機數(shù)種子,省略參數(shù)時使用當(dāng)前系統(tǒng)時間作為隨機數(shù)種子。參數(shù)n為int類型時則直接使用。version為2(默認(rèn))時,str、bytes或bytearray等非int類型會轉(zhuǎn)換為int類型。version為1時,str和bytes類型的參數(shù)也可直接作為隨機數(shù)種子。調(diào)用各種隨機數(shù)函數(shù)時,實質(zhì)上是從隨機數(shù)種子對應(yīng)的序列中取數(shù)。隨機數(shù)種子相同時,連續(xù)多次調(diào)用同一個隨機數(shù)函數(shù)會依次按順序從隨機數(shù)序列中取數(shù),多次運行同一個程序獲得的隨機數(shù)也是相同的(順序相同、數(shù)值相同)。沒有在程序中調(diào)用random.seed()函數(shù)時,默認(rèn)使用當(dāng)前系統(tǒng)時間作為隨機數(shù)種子,可保證每次運行程序得到不同的隨機數(shù)。示例代碼如下。importrandom #導(dǎo)入模塊random.seed(5) #設(shè)置隨機數(shù)種子forninrange(5): #循環(huán)5次

print(random.randint(1,10)) #輸出一個[1,10]范圍內(nèi)的整數(shù)8.2.3整數(shù)隨機數(shù)函數(shù)1.random.randrange(n)返回[0,n)范圍內(nèi)的一個隨機整數(shù),示例代碼如下。>>>foriinrange(5): #輸出5個10以內(nèi)的隨機整數(shù)...print(random.randrange(10))...2.random.randrange(m,n[,step])返回[m,n)范圍內(nèi)的一個隨機整數(shù)。未指定step參數(shù)時,從當(dāng)前隨機數(shù)序列中連續(xù)取數(shù);指定step參數(shù)時,取數(shù)的間隔為step-1示例代碼如下。>>>foriinrange(5): #輸出5個[5,15)范圍內(nèi)的隨機整數(shù)...print(random.randrange(5,15))...3.random.randint(a,b)返回[a,b]范圍內(nèi)的一個隨機整數(shù),示例代碼如下。>>>foriinrange(5):#輸出5個[5,15]范圍內(nèi)的隨機整數(shù)...print(random.randint(5,15))...8.2.4浮點數(shù)隨機數(shù)函數(shù)1.random.random()返回[0.0,1.0)范圍內(nèi)的一個隨機浮點數(shù),示例代碼如下。>>>forninrange(5):...print(random.random())...2.random.uniform(a,b)返回一個隨機浮點數(shù)當(dāng)a<=b時取值范圍為[a,b]當(dāng)b<a時取值范圍為[b,a]示例代碼如下。>>>forninrange(5): #輸出5個[-5,5]范圍內(nèi)的浮點數(shù)...print(random.uniform(-5,5))...8.2.5序列隨機函數(shù)1.random.choice(seq)從非空序列seq隨機選擇一個元素并返回。如果seq為空,則引發(fā)IndexError異常示例代碼如下。>>>seq=[10,5,'a',3,'abc',30]>>>random.choice(seq)10>>>random.choice(seq)'a'>>>random.choice(seq)32.random.shuffle(seq)將序列seq隨機打亂位置,示例代碼如下。>>>seq=[10,5,'a',3,'abc',30]>>>random.shuffle(seq)>>>seq['abc',5,10,'a',3,30]shuffle()函數(shù)只適用于可以修改的序列,要從一個不可變的序列并返回一個新的打亂順序的列表,應(yīng)使用sample(seq,k=len(seq))。3.random.sample(seq,k)從序列seq中隨機選擇k個不重復(fù)的數(shù)據(jù),示例代碼如下。>>>seq['abc',5,10,'a',3,30]>>>random.sample(seq,3)[3,5,30]>>>random.sample(seq,3)['abc',10,3]8.2.6隨機數(shù)實例使用隨機函數(shù)輸出5個5位的隨機字符串。8.3時間處理工具:time庫本節(jié)主要內(nèi)容:時間處理函數(shù)時間格式化函數(shù)計時函數(shù)8.3.1time庫概述time庫提供時間相關(guān)的函數(shù)。與時間相關(guān)的模塊有:time、datetime和calendar。time庫不適用于所有的平臺,其定義的大部分函數(shù)都是調(diào)用平臺的C語言庫中的同名函數(shù)。time庫屬于內(nèi)置模塊,直接導(dǎo)入即可使用。time庫提供的函數(shù)可分為時間處理函數(shù)、時間格式化函數(shù)和計時函數(shù)。1.EpochEpoch指時間起點,取決于平臺,通常為“1970年1月1日00:00:00(UTC)”??烧{(diào)用time.localetime(0)函數(shù)返回當(dāng)前平臺的Epoch示例代碼如下。>>>importtime>>>time.localtime(0)time.struct_time(tm_year=1970,tm_mon=1,tm_mday=1,tm_hour=8,tm_min=0,tm_sec=0,tm_wday=3,tm_yday=1,tm_isdst=0)2.時間戳timestamp時間戳通常指自Epoch到現(xiàn)在的時間的秒數(shù)。3.UTCUTC指CoordinatedUniversalTime(協(xié)調(diào)世界時間),以前稱格林威治天文時間(GMT),是世界標(biāo)準(zhǔn)時間。4.DSTDST指DaylightSavingTime,即夏令時。5.struct_timetime.struct_time類表示時間對象gmtime()、localtime()和strptime()等函數(shù)返回struct_time對象表示的時間。struct_time對象包含的字段如表8-1所示。表8-1struct_time對象包含的字段索引屬性說明0tm_year年份,例如20191tm_mon月份,有效值范圍為[1,12]2tm_mday一月的第幾日,有效值范圍為[1,31]3tm_hour小時,有效值范圍為[0,23]4tm_min分鐘,有效值范圍為[0,59]5tm_sec秒,有效值范圍為[0,61],支持61是歷史原因6tm_wday一周的第幾天,有效值范圍為[0,6],周一為07tm_yday一年的第幾天,有效值范圍為[1,366]8tm_isdst0、1或-1,夏令時生效時為1,未生效時為0,-1表示未知8.3.2時間處理函數(shù)1.time.time()返回自Epoch以來的時間的秒數(shù),示例代碼如下。>>>time.time()1568813495.24639272.time.gmtime()將秒數(shù)轉(zhuǎn)換為UTC的struct_time對象,其中dst標(biāo)志始終為零。如果未提供參數(shù)或參數(shù)為None,則轉(zhuǎn)換當(dāng)前時間示例代碼如下。>>>time.gmtime() #轉(zhuǎn)換當(dāng)前時間time.struct_time(tm_year=2019,tm_mon=9,tm_mday=18,tm_hour=13,tm_min=34,tm_sec=34,tm_wday=2,tm_yday=261,tm_isdst=0)>>>time.gmtime(10**8) #轉(zhuǎn)換指定秒數(shù)time.struct_time(tm_year=1973,tm_mon=3,tm_mday=3,tm_hour=9,tm_min=46,tm_sec=40,tm_wday=5,tm_yday=62,tm_isdst=0)>>>t=time.gmtime(10**8) #轉(zhuǎn)換秒數(shù)>>>t[0] #索引年份字段1973>>>t.tm_year #以屬性的方式訪問年份字段19733.time.localtime()將秒數(shù)轉(zhuǎn)換為當(dāng)?shù)貢r間。如果未提供參數(shù)或參數(shù)為None,則轉(zhuǎn)換當(dāng)前時間。如果給定時間適用于夏令時,則將dst標(biāo)志設(shè)置為1示例代碼如下。>>>time.localtime() #轉(zhuǎn)換當(dāng)前時間time.struct_time(tm_year=2019,tm_mon=9,tm_mday=18,tm_hour=21,tm_min=39,tm_sec=22,tm_wday=2,tm_yday=261,tm_isdst=0)>>>time.localtime(10**8) #轉(zhuǎn)換指定秒數(shù)time.struct_time(tm_year=1973,tm_mon=3,tm_mday=3,tm_hour=17,tm_min=46,tm_sec=40,tm_wday=5,tm_yday=62,tm_isdst=0)4.time.ctime()將秒數(shù)轉(zhuǎn)換為表示本地時間的字符串。如果未提供參數(shù)或參數(shù)為None,則轉(zhuǎn)換當(dāng)前時間示例代碼如下。>>>time.ctime() #轉(zhuǎn)換當(dāng)前時間'WedSep1821:50:232019'>>>time.ctime(10**8) #轉(zhuǎn)換指定秒數(shù)'SatMar317:46:401973'8.3.3時間格式化函數(shù)1.time.mktime()mktime()是localtime()的反函數(shù),其參數(shù)是struct_time對象或者完整的9元組(按順序與struct_time對象字段一一對應(yīng)),生成表示本地時間的浮點數(shù),與time()兼容。如果輸入值不能轉(zhuǎn)換為有效時間,則發(fā)生OverflowError或ValueError異常。函數(shù)可以生成的最早日期取決于操作系統(tǒng)。示例代碼如下。>>>t=time.localtime() #獲得本地時間的struct_time對象>>>time.mktime(t) #獲得本地時間的秒數(shù)1568851744.0>>>a=(2017,12,31,9,30,45,7,365,0) #構(gòu)造9元組>>>time.mktime(a) #生成時間1514683845.02.time.strftime(format[,t]))參數(shù)t是一個時間元組或struct_time對象,可以將其轉(zhuǎn)換為format參數(shù)指定的時間格式化字符串。如果未提供t,則使用當(dāng)前時間。format必須是一個字符串。如果t中的任何字段超出允許范圍,則發(fā)生ValueError異常。0可作為時間元組中任何位置的參數(shù);如果它是非法的,則會被強制改為正確的值。表8-2常用時間格式化指令-1格式化指令說明%a星期中每日的本地化縮寫名稱%A星期中每日的本地化完整名稱%b月份的本地化縮寫名稱%B月份的本地化完整名稱%c本地化的適當(dāng)日期和時間表示%d十進制數(shù)表示的月中的第幾日,有效值范圍為[1,31]%H十進制數(shù)表示的小時,有效值范圍為[0,23](24小時制)%I十進制數(shù)表示的小時,有效值范圍為[1,12](12小時制)%j十進制數(shù)表示的年中的第幾天,有效值范圍為十進制數(shù)[1,366]%m十進制數(shù)表示的月份,有效值范圍為[1,12]%M十進制數(shù)表示的分鐘,有效值范圍為[00,59]%p本地化的AM或PM表8-2常用時間格式化指令-2格式化指令說明%S十進制數(shù)表示的秒,有效值范圍為[00,61]%U十進制數(shù)表示的一年中的第幾周,有效值范圍為[00,53]%w十進制數(shù)表示的一周中的第幾天,有效值范圍為[0,6],星期日為0%W十進制數(shù)表示的一年的周數(shù),有效值范圍為[00,53]%x本地化的適當(dāng)日期表示%X本地化的適當(dāng)時間表示%y十進制數(shù)表示的2位年份,有效值范圍為[00,99]%Y十進制數(shù)表示的4位年份%z以+HHMM或-HHMM格式表示的時區(qū)偏移%Z時區(qū)名稱%%字符“%”示例代碼如下。>>>t=time.localtime()>>>time.strftime('%Y-%m-%d%H:%M:%S',t)'2019-09-1909:30:52'strftime()函數(shù)的時間格式化字符串中不支持非ASCII碼字符,要獲得中文時間字符串,需使用struct_time的字段來構(gòu)造字符串示例代碼如下。>>>t=time.localtime()>>>format='%s年%s月%s日%s時%s分%s秒'>>>print(format%(t.tm_year,t.tm_mon,t.tm_mday,t.tm_hour,t.tm_min,t.tm_sec))2019年9月21日15時30分59秒3.time.strptime(t,format)strptime()可看作是strtime()的逆函數(shù),按格式化字符串format解析字符串t中的時間,返回一個struct_time對象。示例代碼下。>>>time.strptime("1Nov01","%d%b%y")time.struct_time(tm_year=2001,tm_mon=11,tm_mday=1,tm_hour=0,tm_min=0,tm_sec=0,tm_wday=3,tm_yday=305,tm_isdst=-1)8.3.4計時函數(shù)1.time.sleep(secs)暫停執(zhí)行當(dāng)前線程secs秒。參數(shù)secs可以是浮點數(shù),以便更精確地表示暫停時間。示例代碼如下。>>>time.sleep(5) #暫停5秒,5秒后才會顯示下一個提示符“>>>”>>>2.time.monotonic()返回單調(diào)時鐘的秒數(shù)(小數(shù)),時鐘不能后退、不受系統(tǒng)時間影響,連續(xù)調(diào)用獲得的秒數(shù)差值可作為有效的計時時間示例代碼如下。>>>time.monotonic()674362.281>>>time.monotonic()674365.0623.perf_counter()返回性能計數(shù)器的秒數(shù)(小數(shù)),包含線程睡眠時間,連續(xù)調(diào)用獲得的秒數(shù)差值可作為有效的計時時間示例代碼如下。>>>time.perf_counter()8880.6596039>>>time.perf_counter()8883.36320894.perf_counter_ns()與perf_counter()類似,返回納秒數(shù)(整數(shù))示例代碼如下。>>>time.perf_counter_ns()9060467367300>>>time.perf_counter_ns()90621951701008.3.5時間函數(shù)實例定義兩個函數(shù),分別用for循環(huán)和while循環(huán)計算1+2+……+1000,計算調(diào)用函數(shù)完成求和耗費的時間8.4圖形用戶界面工具:Tkinter庫Tkinter是Python默認(rèn)的圖形用戶界面(GraphicalUserInterface,GUI)庫,Tkinter是Tkinterface的縮寫,指Tkinter庫是Tcl/Tk的Python接口。本節(jié)主要內(nèi)容:Tkinter庫基礎(chǔ)Tkinter窗口窗口布局事件處理控件簡介對話框8.4.1Tkinter庫基礎(chǔ)Tkinter庫已成為Python的內(nèi)置模塊,隨Python一起安裝。8.4.1Tkinter庫基礎(chǔ)可在Windows系統(tǒng)命令行中運行“python-mtkinter”命令檢查Tkinter庫是否已正確安裝命令會彈出一個Tk圖形窗口,并在窗口中顯示Tcl/Tk的版本號,根據(jù)版本號可參考對應(yīng)的Tcl/Tk文檔。1.Tcl、Tk和TkinterTkinter是Python的默認(rèn)GUI庫,它基于Tk工具包實現(xiàn)。Tk工具包最初是為工具命令語言(ToolCommandLanguage,Tcl)設(shè)計的。Tk被移植到多種語言,包括Python(Tkinter)、Perl(Perl/Tk)和Ruby(Ruby/Tk)等。Tk可能不是最新、最好的GUI設(shè)計工具包,但它簡單易用,可快速實現(xiàn)運行于多種平臺的GUI應(yīng)用程序。Python賦予了Tk新的活力,它提供了一種能夠更快實現(xiàn)GUI應(yīng)用的原型系統(tǒng),使用控件(widget,也稱小部件、組件),開發(fā)人員可以快速實現(xiàn)應(yīng)用程序界面。2.使用Tkinter庫在Python3中,Tkinter庫在Python中的模塊名稱被重命名為tkinter(首字母小寫)。在程序中使用時,需要先導(dǎo)入該模塊示例代碼如下。>>>importtkinter或者:>>>fromtkinterimport*命令執(zhí)行正確,沒有報錯就說明Tkinter庫已正確安裝。3.Tkinter程序基本結(jié)構(gòu)下面的代碼使用Tkinter庫創(chuàng)建一個窗口,在窗口中顯示一個字符串。importtkinter #導(dǎo)入tkinter模塊w=tkinter.Tk() #創(chuàng)建主窗口label=tkinter.Label(w,text='你好,Python!') #創(chuàng)建標(biāo)簽label.pack() #打包標(biāo)簽w.mainloop() #開始事件循環(huán)Tkinter程序的基本結(jié)構(gòu)如下。(1)導(dǎo)入tkinter模塊。(2)創(chuàng)建主窗口:所有控件默認(rèn)情況下都以主窗口作為容器。(3)在主窗口中創(chuàng)建控件:調(diào)用控件類對象創(chuàng)建控件時,第一個參數(shù)為主窗口。(4)打包控件:打包器決定如何在窗口中顯示控件。未打包的控件不會在窗口中顯示。(5)開始事件循環(huán):開始事件循環(huán)后,Tkinter監(jiān)聽窗口中的鍵盤和鼠標(biāo)事件,響應(yīng)用戶操作。mainloop()函數(shù)會一直運行,直到關(guān)閉主窗口結(jié)束程序。8.4.2Tkinter窗口tkinter.Tk()函數(shù)創(chuàng)建一個主窗口,也稱根窗口。主窗口只有一個,它是一個容器,用于包含標(biāo)簽、按鈕、列表框等控件或其他容器,構(gòu)成應(yīng)用程序的主界面。1.使用默認(rèn)主窗口GUI程序并不需要顯式地創(chuàng)建主窗口,示例代碼如下。>>>fromtkinterimport* #導(dǎo)入tkinter模塊>>>label=Label(text='你好Tkinter') #創(chuàng)建標(biāo)簽,此時會創(chuàng)建并顯示主窗口>>>label.pack() #打包標(biāo)簽,此時在主窗口中顯示標(biāo)簽>>>mainloop() #開始事件循環(huán)在創(chuàng)建第一個控件時,如果還沒有主窗口,Python會自動調(diào)用Tk()創(chuàng)建一個主窗口。2.窗口主要方法窗口主要方法如下。title('標(biāo)題名'):修改窗口標(biāo)題。geometry('400x300'):設(shè)置窗口大小。quit():退出窗口。update():刷新窗口。示例代碼如下。>>>fromtkinterimport* >>>root=Tk()>>>root.title('主窗口') #設(shè)置窗口標(biāo)題''>>>root.geometry('400x300') #設(shè)置窗口大小8.4.3窗口布局1.Packer布局Packer布局是Tk的一種幾何管理器,它通過相對位置控制控件在容器中的位置。因為控件的位置是相對的,當(dāng)容器大小發(fā)生變化時,控件會自動調(diào)整位置。在調(diào)用pack()方法打包控件時,控件所在的容器使用Packer布局。表8-3pack()方法可用參數(shù)參數(shù)說明anchor當(dāng)可用空間大于控件本身的的大小時,該參數(shù)決定控件在容器中的位置。參數(shù)值可使用的常量包括:N(北,代表上)、E(東,代表右)、S(南,代表下)、W(西,代表左)、NW(西北,代表左上)、NE(東北,代表右上)、SW(西南,代表左下)、SE(東南,代表右下)和CENTER(中心,默認(rèn)值)expand取值True或False(默認(rèn)值),指定當(dāng)父容器增大時是否拉伸控件fill設(shè)置控件是否沿水平或垂直方向填充。參數(shù)值可使用的處理包括:NONE、X、Y和BOTH,其中NONE表示不填充,BOTH表示沿水平和垂直兩個方向填充ipadx指定控件邊框內(nèi)部在x方向(水平)上的預(yù)留空白寬度(padding)ipady指定控件邊框內(nèi)部在y方向(垂直)上的預(yù)留空白寬度(padding)padx指定控件邊框外部在x方向(水平)上的預(yù)留空白寬度pady指定控件邊框外部在y方向(垂直)上的預(yù)留空白寬度side設(shè)置控件在容器中的位置,參數(shù)值可使用的常量包括:TOP、BOTTOM、LEFT或RIGHTPacker布局實例fromtkinterimport*root=Tk()label1=Label(root,text='標(biāo)簽1',bg='green',fg='white')label2=Label(root,text='標(biāo)簽2',bg='green',fg='white')label3=Label(root,text='標(biāo)簽3',bg='black',fg='white')label4=Label(root,text='標(biāo)簽4',bg='black',fg='white')label5=Label(root,text='標(biāo)簽5',bg='black',fg='white')label1.pack(side=LEFT,fill=Y)label2.pack(side=RIGHT,fill=Y)label3.pack(side=TOP,expand=YES,fill=Y)label4.pack(expand=YES,fill=BOTH)label5.pack(anchor=E)root.mainloop()2.Grid布局Grid布局可稱為網(wǎng)格布局,它按照二維表格的形式,將容器劃分為若干行和若干列,行列所在位置為一個單元格,類似于Excel表格。采用grid()方法打包控件時,控件所在的容器使用Grid布局。在grid()方法中,用參數(shù)row設(shè)置控件所在的行,column參數(shù)設(shè)置控件所在的列。行列默認(rèn)開始值為0,依次遞增。行和列的序號的大小表示了相對位置,數(shù)字越小表示位置越靠前。grid()方法常用的其他參數(shù)如下。rowspan:控件占用的行數(shù)。columnspan:控件占用的列數(shù)。sticky:控件在單元格內(nèi)的對齊方式,可用常量為:N、S、W、E、NW、SW、NE、SE和CENTER,與pack()方法的anchor參數(shù)值一致。ipadx或ipady:控件邊框內(nèi)部左右或上下預(yù)留空白寬度。padx或pady:控件邊框外部左右或上下預(yù)留空白寬度。Grid布局實例fromtkinterimport*label1=Label(text='標(biāo)簽1',fg='white',bg='black')label2=Label(text='標(biāo)簽2',fg='red',bg='yellow')label3=Label(text='標(biāo)簽3',fg='white',bg='green')label1.grid(row=0,column=3) #標(biāo)簽1放在0行3列l(wèi)abel2.grid(row=1,column=2) #標(biāo)簽2放在1行2列l(wèi)abel3.grid(row=1,column=1) #標(biāo)簽3放在1行1列mainloop()3.Place布局Place布局可以比Grid和Packer布局更精確地控制控件在容器中的位置。在調(diào)用控件的place()方法時,控件所在的容器使用Place布局。Place布局可以和Grid或者Packer布局同時使用。place()方法常用參數(shù)如下。anchor:指定控件在容器中的位置,默認(rèn)為左上角(NW),可使用N、S、W、E、NW、SW、NE、SE和CENTER等常量。bordermode:指定在計算位置時,是否包含容器邊界寬度,默認(rèn)為INSIDE(要計算容器邊界),OUTSIDE表示不計算容器邊界。height、width:指定控件的高度和寬度,默認(rèn)單位為像素。relheight、relwidth:按容器高度和寬度的比例來指定控件的高度和寬度,取值范圍為0.0~1.0。x、y:用絕對坐標(biāo)指定控件的位置,坐標(biāo)默認(rèn)單位為像素。relx、rely:按容器高度和寬度的比例來指定控件的位置,取值范圍為0.0~1.0。在使用坐標(biāo)時,容器左上角為原點(0,0)Place布局實例fromtkinterimport*label1=Label(text='標(biāo)簽1',fg='white',bg='black')label2=Label(text='標(biāo)簽2',fg='red',bg='yellow')label3=Label(text='標(biāo)簽3',fg='white',bg='green')label1.place(x=0,y=0)label2.place(x=50,y=50)label3.place(relx=0.5,rely=0.2)mainloop()8.4.4事件處理事件通常指用戶在窗口中的動作,如單擊鼠標(biāo)、按下鍵盤某個鍵等??捎胏ommand參數(shù)為控件指定鼠標(biāo)單擊按鈕時執(zhí)行的函數(shù)。在發(fā)生事件時執(zhí)行的函數(shù)可稱為事件處理函數(shù),或者叫回調(diào)函數(shù)。其他的一些控件,如單選按鈕、復(fù)選框、標(biāo)尺、滾動條等,都支持command參數(shù)。用command參數(shù)綁定事件處理函數(shù)label1=Label(text='事件處理')label1.pack()defshowmsg1():label1.config(text='單擊了按鈕1')defshowmsg2():label1.config(text='單擊了按鈕2')bt1=Button(text='按鈕1',command=showmsg1)bt2=Button(text='按鈕2',command=showmsg2)bt1.pack()bt2.pack()mainloop()command參數(shù)只能為控件綁定單擊事件處理函數(shù)。當(dāng)事件發(fā)生時,Tkinter會創(chuàng)建一個事件對象,該對象包含了事件的詳細(xì)信息。command參數(shù)綁定的事件處理函數(shù)不能獲得事件對象。要使用事件對象,需要使用bind()方法來為控件綁定事件處理函數(shù)。bind()方法接收事件名稱和事件處理函數(shù)名稱作為參數(shù),基本格式如下??丶?bind(事件名稱,函數(shù)名稱)常用鼠標(biāo)和鍵盤事件名稱<Button-n>:單擊鼠標(biāo)鍵,n為1表示左鍵,2表示中間鍵,3表示右鍵。<B1-Motion>:按住鼠標(biāo)左鍵移動。<Double-Button-1>:雙擊左鍵。<Enter>:鼠標(biāo)指針進入控件區(qū)域。<Leave>:鼠標(biāo)指針離開控件區(qū)域。<MouseWheel>:滾動滾輪。<KeyPress-A>:按下【A】鍵,“A”可用其他鍵替代。<Alt-KeyPress-A>:按下【alt+A】組合鍵,“alt”可用“ctrl”和“shift”等替代。

溫馨提示

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

評論

0/150

提交評論