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

下載本文檔

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

文檔簡介

第9章圖形繪制第9章

圖形繪制Tkinter概述畫布繪圖圖形的事件處理圖形繪制應(yīng)用舉例9.1Tkinter概述Tkinter是Python語言的標(biāo)準(zhǔn)GUI庫,常被用于快速開發(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()方法,通過幾何布局管理器調(diào)整并顯示其位置和大小。9.1.3Tkinter的主窗口Tkinter的主窗口也被稱為根窗體,是圖形化應(yīng)用程序的根容器,是Tkinter模塊底層控件的實(shí)例。在導(dǎo)入Tkinter模塊后,我們可以調(diào)用Tk()方法來初始化一個(gè)根窗體實(shí)例。window=Tk()例9-1

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

frm_main=Tk()

frm_main.mainloop()2.裝飾界面屬性說明舉例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畫布對象的創(chuàng)建畫布(canvas)是用來繪制圖形的區(qū)域,所有tkinter模塊中的圖形操作都是在畫布上完成的。(1)創(chuàng)建一個(gè)畫布對象畫布對象名=Canvas(窗口對象名,屬性名=屬性值,...)畫布對象的常用屬性:高度(height)、寬度(width)、背景色(bg或background)等。c=Canvas(w,width=300,height=200,bg='white')(2)

顯示畫布對象c.pack()(3)

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

格式:r=畫布對象名.create_rectangle(x0,y0,x1,y1,屬性設(shè)置……)其中,(x0,y0)是矩形左上角的坐標(biāo),(x1,y1)是矩形右下角的坐標(biāo)。屬性設(shè)置即對矩形的屬性進(jìn)行設(shè)置。r保存圖形的標(biāo)識號。>>>r=c.create_rectangle(80,70,250,180,tags="Rect2")2.矩形對象的常用屬性(1)矩形邊框?qū)傩詏utline屬性:通過outline屬性可以設(shè)置矩形的邊框顏色,默認(rèn)值為黑色。width屬性:通過width屬性可以設(shè)置邊框的寬度,默認(rèn)值為1像素。dash屬性:通過dash屬性可以繪制邊框成虛線形式,該屬性的值是整數(shù)元組。例如二元組(a,b),其中a表示要畫多少個(gè)像素,b表示要跳過多少個(gè)像素。(2)矩形內(nèi)部填充屬性fill屬性:通過fill屬性可以設(shè)置矩形內(nèi)部區(qū)域的填充顏色,默認(rèn)值為空字符串,即透明的效果。stipple屬性:在填充顏色時(shí),可以使用stipple屬性設(shè)置填充畫刷,即填充的點(diǎn)刻效果,可以取gray12、gray25、gray50、gray75等值。state屬性:該屬性用于設(shè)置圖形的顯示狀態(tài),默認(rèn)值為NORMAL或normal,即正常顯示。9.2.2繪制橢圓與圓弧1.繪制橢圓畫布對象名.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:定義弧形的開始位置,其值為一個(gè)角度(x軸方向?yàn)?o)。默認(rèn)值為0o。屬性extent:定義弧形的結(jié)束位置,其值表示從開始位置逆時(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顯示文本畫布對象名.create_text(x,y,屬性設(shè)置...)(x,y)指定文本顯示的參考位置text屬性:設(shè)置文本內(nèi)容,其值即為要顯示的字符串。anchor屬性:用于指定文本的哪個(gè)錨點(diǎn)與顯示位置(x,y)對齊。錨點(diǎn)可通過E(東)、S(南)、W(西)、N(北)、CENTER(中)、SE(東南)、SW(西南)、NW(西北)、NE(東北)等方位常量表示fill屬性用于設(shè)置文本的顏色,默認(rèn)值為黑色。justify屬性用于控制多行文本的對齊方式,其值可以是LEFT、CENTER或RIGHT,默認(rèn)為LEFT。font屬性指定文本字體。例9-4

畫布文本顯示示例。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í)行過程中發(fā)生的操作。例如單擊鼠標(biāo)左鍵、按下鍵盤上的某個(gè)鍵等。某個(gè)對象可以與特定事件綁定在一起,這樣當(dāng)特定事件發(fā)生時(shí),可以調(diào)用特定的函數(shù)來處理該事件。1.事件綁定使用畫布對象的bind()方法或者tag_bind()方法。例如:

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

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

turtle繪圖體系:1969年誕生,主要用于程序設(shè)計(jì)入門Python語言的標(biāo)準(zhǔn)庫之一入門級的圖形繪制函數(shù)庫9.4turtle繪圖turtle的原理turtle(海龜)是一種真實(shí)的存在有一只海龜,其實(shí)在窗體正中心,在畫布上游走走過的軌跡形成了繪制的圖形海龜由程序控制,可以變換顏色、改變寬度等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í)使用的語句格式是turtle.circle(10)fromturtleimport*函數(shù)調(diào)用時(shí)使用的語句格式是circle(10)importturtleast函數(shù)調(diào)用時(shí)使用的語句格式是t.circle(10)0102032.turtle繪圖屬性

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

作用:設(shè)置畫筆顏色,當(dāng)無參數(shù)輸入時(shí)返回當(dāng)前畫筆顏色。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)備開始填充圖形作用:填充完成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)絕對角度4.turtle.seth(to_angle)函數(shù)或turtle.setheading(to_angle)作用:設(shè)置小海龜當(dāng)前行進(jìn)方向?yàn)閠o_angle,該角度是絕對方向角度值。只改變方向但不行進(jìn)。

>>>turtle.seth(-40)turtle角度坐標(biāo)體系turtle.seth(45)turtle.seth(-135)5.turtle.left(angle)函數(shù)作用:順時(shí)針移動(dòng)angle度。該角度為相對角度。只改變方向不移動(dòng)。6.turtle.right(angle)函數(shù)作用:逆時(shí)針移動(dòng)angle度。該角度為相對角度。只改變方向不移動(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()#提起畫筆goto(0,-50-i*50)#確定畫圓的起點(diǎn)down()#放下畫筆circle(50+i*50)#畫圓1、下列哪個(gè)選項(xiàng)能夠使用turtle庫繪制一個(gè)半圓形?(

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

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

繪制太陽花,其中畫筆顏色為紅色,填充顏色為黃色。程序如下:importturtleturtle.color("red","yellow")turtle.begin_fill()foriinrange(50):turtle.forward(200)turtle.right(170)turtle.end_fill()turtle.done()9.5圖形繪制應(yīng)用舉例實(shí)例一:Python蟒蛇繪制importturtleturtle.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)實(shí)例二:科赫曲線繪制importturtledefkoch(size,n):ifn==0:turtle.fd(size)else:foranglein[0,60,-120,60]:turtle.left(angle)koch(size/3,n-1)defmain():turtle.setup(600,600)turtle.speed(0)turtle.penup()turtle.goto(-200,-100)turtle.pendown()turtle.pensize(2)level=5koch(400,level)turtle.right(120)koch(400,level)turtle.right(120)koch(400,level)turtle.hideturtle()main()turtle.done()第10章圖形用戶界面程序設(shè)計(jì)10.1GUI編程1.窗口與組件在進(jìn)行GUI開發(fā)時(shí),首先需要?jiǎng)?chuàng)建一個(gè)頂層窗口。該窗口充當(dāng)容器的角色,可以存放程序所需的各種組件,例如按鈕、下拉框、單選框等。頂層窗口包含了所有的組件,而組件本身也可以作為容器使用,包含其他組件。包含其他組件的組件被稱為父組件,而被包含在其中的組件則被稱為子組件。2.事件驅(qū)動(dòng)與回調(diào)機(jī)制事件:用戶使用GUI程序進(jìn)行的操作,如移動(dòng)鼠標(biāo)、點(diǎn)擊鼠標(biāo)、按下鍵盤上的按鍵等?;卣{(diào)機(jī)制:當(dāng)某個(gè)事件發(fā)生時(shí),程序?qū)⒄{(diào)用對應(yīng)的事件處理函數(shù)并做出相應(yīng)的響應(yīng)。事件對應(yīng)的處理函數(shù)被稱為回調(diào)函數(shù)。10.2Tkinter的主要組件使用Tkinter庫創(chuàng)建一個(gè)GUI程序只需要以下步驟:(1)導(dǎo)入Tkinter模塊。(2)創(chuàng)建GUI應(yīng)用程序的主窗口(頂層窗口)。(3)添加完成程序功能所需要的組件。(4)編寫回調(diào)函數(shù)。(5)進(jìn)入主事件循環(huán),對用戶觸發(fā)的事件做出響應(yīng)。10.2.1標(biāo)簽標(biāo)簽(Label)是用來顯示圖片和文本的組件。在top主窗口中創(chuàng)建標(biāo)簽:label=Label(top,text=屬性值)text屬性:設(shè)置顯示的文本例10-1在標(biāo)簽內(nèi)顯示兩行文字fromtkinterimport*top=Tk()top.title(u"主窗口")label=Label(top,text="HelloWorld,\nfromTkinter")label.pack()top.mainloop()10.2.2框架框架(Frame)是其他組件的一個(gè)容器,通常是用來包含一組控件的主體。frame=Frame(top,屬性1=表達(dá)式1,屬性2=表達(dá)式2….)例10-2fromtkinterimport*top=Tk()top.title(u"主窗口")forrelief_settingin["raised","flat","groove","ridge","solid","sunken"]:frame=Frame(top,borderwidth=2,relief=relief_setting)Label(frame,text=relief_setting,width=10).pack()frame.pack(side=LEFT,padx=5,pady=5)top.mainloop()10.2.3按鈕在主窗口w中創(chuàng)建了一個(gè)按鈕控件:btn=Button(w,text="Quit",command=w.quit)Command屬性:指定按鈕的事件處理函數(shù),將按鈕與某個(gè)函數(shù)或方法關(guān)聯(lián)起來。例10-3fromtkinterimport*top=Tk()top.title(u"主窗口")bt1=Button(top,text=u"禁用",state=DISABLED)bt2=Button(top,text=u"退出",command=top.quit)bt1.pack(side=LEFT)bt2.pack(side=LEFT)top.mainloop()10.2.4輸入框輸入框(Entry)是用來接收用戶文本輸入的組件。E1=Entry(f1,width=30)例10-4fromtkinterimport*top=Tk()top.title(u"登錄")f1=Frame(top)Label(f1,text=u"用戶名").pack(side=LEFT)E1=Entry(f1,width=30)E1.pack(side=LEFT)f1.pack()f2=Frame(top)Label(f2,text=u"密碼").pack(side=LEFT)E2=Entry(f2,width=30)E2.pack(side=LEFT)f2.pack()f3=Frame(top)Button(f3,text=u"登錄").pack()f3.pack()top.mainloop()10.2.5單選按鈕和復(fù)選按鈕單選按鈕(Radiobutton)和復(fù)選按鈕(Checkbutton)比較:相同點(diǎn):都是用于用戶進(jìn)行選擇輸入。區(qū)別:前者是互斥性選擇,即用戶只能從一組選項(xiàng)中選擇一個(gè)選項(xiàng);而后者支持用戶選擇多個(gè)選項(xiàng)。(1)單選按鈕的創(chuàng)建:需要將這些按鈕與一個(gè)相同的變量關(guān)聯(lián)起來,以設(shè)定或獲取單選按鈕組當(dāng)前的選中狀態(tài)。

r=Radiobutton(f1,text=txt,value=val,variable=choice)(2)復(fù)選框的創(chuàng)建:需要將每個(gè)選項(xiàng)與一個(gè)不同的變量關(guān)聯(lián)起來,以表示每個(gè)選項(xiàng)的選中狀態(tài)。r=Checkbutton(f1,text=txt,variable=ch,command=update_cstr)fromtkinterimport*top=Tk()top.title(u"單選")f1=Frame(top)choice=IntVar(f1)#定義動(dòng)態(tài)綁定變量fortxt,valin[('1',1),('2',2),('3',3)]:#將所有的選項(xiàng)與變量choice綁定起來r=Radiobutton(f1,text=txt,value=val,variable=choice)r.pack()choice.set(1)#設(shè)定默認(rèn)選項(xiàng)Label(f1,text=u"您選擇了:").pack()Label(f1,textvariable=choice).pack()#將標(biāo)簽與變量動(dòng)態(tài)綁定起來f1.pack()top.mainloop()例10-5例10-6fromtkinterimport*top=Tk()top.title(u"多選")f1=Frame(top)choice={}#存放綁定變量的字典cstr=StringVar(f1)cstr.set("")defupdate_cstr():selected=[str(i)foriin[1,2,3]ifchoice[i].get()==1]

cstr.set(",".join(selected))fortxt,valin[('1',1),('2',2),('3',3)]:ch=IntVar(f1)#建立與每個(gè)選項(xiàng)綁定的變量choice[val]=ch#將綁定的變量加入字典choicer=Checkbutton(f1,text=txt,variable=ch,command=update_cstr)r.pack()Label(f1,text=u"您選擇了:").pack()Label(f1,textvariable=cstr).pack()f1.pack()top.mainloop()10.2.6列表框與滾動(dòng)條列表框(Listbox):用列表的形式展示多個(gè)選項(xiàng)以供用戶選擇。滾動(dòng)條(Scrollbar):用來處理組件界面上一次性顯示不全的情況。scrollbar=Scrollbar(top)#創(chuàng)建滾動(dòng)條mylist=Listbox(top,yscrollcommand=scrollbar.set)fromtkinterimport*top=Tk()top.title(u"列表框")scrollbar=Scrollbar(top)#創(chuàng)建滾動(dòng)條scrollbar.pack(side=RIGHT,fill=Y)#設(shè)置滾動(dòng)條布局#將列表與滾動(dòng)條綁定,并加入主窗體mylist=Listbox(top,yscrollcommand=scrollbar.set)forlineinrange(20):mylist.insert(END,str(line))mylist.pack(side=LEFT,fill=BOTH)#設(shè)置列表布局scrollbar.config(command=mylist.yview)#將滾動(dòng)條行為與列表綁定mainloop()例10-710.3對象的布局方式10.3.1pack布局管理器pack布局管理器將所有控件組織為一行或一列,控件的添加順序決定了它們在父控件中的位置。side屬性:改變控件的排列位置,LEFT表示左側(cè)對齊,RIGHT表示右側(cè)對齊。fill屬性:設(shè)置填充空間。 X:在水平方向填充, Y:在垂直方向填充, BOTH:在水平和垂直兩個(gè)方向上填充, NONE:不填充。ipadx/ipady:用于設(shè)置控件內(nèi)部在水平/垂直方向的間距。padx/pady用于設(shè)置控件外部在水平/垂直方向的間距。expand屬性:指定如何使用額外的“空白”空間。 =1:隨著父控件的大小變化而變化, =0:子控件大小不能擴(kuò)展。fromtkinterimport*w=Tk()w.geometry('250x100')#改變w的大小為250x100Lbl1=Label(w,text='北京',bg='yellow3')Lbl1.pack(expand=1,side=LEFT,ipadx=20)Lbl2=Label(w,text='天津',bg='red')Lbl2.pack(fill=BOTH,expand=1,side=LEFT,padx=10)Lbl3=Label(w,text='上海',bg='green')Lbl3.pack(fill=X,expand=0,side=RIGHT,padx=10)w.mainloop()例10-810.3.2grid布局管理器grid布局管理器將窗口或框架視為一個(gè)由行和列構(gòu)成的二維表格,并將控件放入行列交叉處的單元格中。row:指定控件所要放置的行編號。column:指定控件所要放置的列編號。Sticky:用來改變對齊方式。如N、S、E、W、CENTER表示上、下、左、右、中心點(diǎn),還可以取NE、SE、NW、SW,表示右上角、右下角、左上角、左下角。Rowspan:指定在行方向上的跨度。Columnspan:指定在列方向上的跨度。例10-9fromtkinterimport*w=Tk()var1=IntVar()var2=IntVar()Label(w,text="姓名").grid(row=0,column=0,sticky=W)Label(w,text="住址").grid(row=1,column=0,sticky=W)Entry(w).grid(row=0,column=1)Entry(w).grid(row=1,column=1)lframe=LabelFrame(w,text='性別')radiobutton1=Radiobutton(lframe,text='男',variable=var1)radiobutton2=Radiobutton(lframe,text='女',variable=var2)lframe.grid(sticky=W)radiobutton1.grid(sticky=W)radiobutton2.grid(sticky=W)photo=PhotoImage(file="e:\\mypython\\photo.png")label=Label(image=photo)label.image=photolabel.grid(row=2,column=1,sticky=W+E+N+S,padx=5,pady=5)w.mainloop()10.3.3place布局管理器place布局管理器可以直接指定控件在父控件(窗口或框架)中的位置坐標(biāo)。為使用這種布局,只需先創(chuàng)建控件,再調(diào)用控件的place()方法,并使用該方法的選項(xiàng)x和y設(shè)定坐標(biāo)。父控件的坐標(biāo)系以左上角為原點(diǎn)(0,0),x軸方向向右,y軸方向向下。>>>Label(w,text="Hello").place(x=0,y=0)>>>Label(w,text="World").place(x=199,y=199,anchor=SE)>>>Label(w,text="Hello").place(relx=0.25,rely=0.5,anchor=SW)10.4對話框10.4.1自定義對話框主要步驟:(1)先創(chuàng)建頂層窗口對象(2)添加所需的按鈕和其他控件。例10-10簡易對話框應(yīng)用示例。fromtkinterimport*defMsg():top=Toplevel(width=400,height=200)Label(top,text='Python').pack()w=Tk()Button(w,text='OK',command=Msg).pack()w.mainloop()10.4.2標(biāo)準(zhǔn)對話框1.messagebox子模塊

提供一系列用于顯示信息或進(jìn)行簡單對話的消息框,可通過調(diào)用函數(shù)askyesno()、askquestion()、askyesnocancel()、askokcancel()、askretrycancel()、showerror()、showinfo()和showwarning()來創(chuàng)建。fromtkinter.messageboximport*ask=askyesno(title='消息框演示',message='是否繼續(xù)?')ifask:showinfo(title='信息提示',message='繼續(xù)!')else:showinfo(title='信息提示',message='終止!')例子:2.filedialog子模塊

提供用于文件瀏覽、打開和保存的對話框,可通過調(diào)用函數(shù)askopenfilename()、asksaveasfilename()等函數(shù)來創(chuàng)建。fromtkinter.filedialogimport*askopenfilename(title='文件對話框',\filetypes=[('Python源文件','.py')])例子:打開對話框3.colorchooser子模塊提供用于選擇顏色的對話框,可通過函數(shù)askcolor()來創(chuàng)建。fromtkinter.colorchooserimport*askcolor(title='顏色對話框')10.5事件處理10.5.1事件處理程序1.事件的描述一般形式是:<修飾符>-<類型符>-<細(xì)節(jié)符>修飾符:描述鼠標(biāo)的單擊、雙擊,以及鍵盤組合按鍵等情況。類型符:事件類型,最常用的類型有分別表示鼠標(biāo)事件和鍵盤事件的Button和Key。細(xì)節(jié)符:具體的鼠標(biāo)鍵或鍵盤按鍵,如鼠標(biāo)的左、中、右三個(gè)鍵分別用1、2、3表示,鍵盤按鍵用相應(yīng)字符或按鍵名稱表示。例如:<Double-Button-1>(1)常用鼠標(biāo)事件<ButtonPress-1>:按下鼠標(biāo)左鍵,可簡寫為<Button-1>或<1>。類似的有<Button-2>(按下鼠標(biāo)中鍵)和<Button-3>(按下鼠標(biāo)右鍵)。<B1-Motion>:按下鼠標(biāo)左鍵并移動(dòng)鼠標(biāo)。類似的有<B2-Motion>和<B3-Motion>。<Double-Button-1>:雙擊鼠標(biāo)左鍵。<Enter>:鼠標(biāo)指針進(jìn)入

溫馨提示

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

最新文檔

評論

0/150

提交評論