《Python程序設(shè)計(jì)與案例教程》課件chap11圖形用戶界面設(shè)計(jì)_第1頁(yè)
《Python程序設(shè)計(jì)與案例教程》課件chap11圖形用戶界面設(shè)計(jì)_第2頁(yè)
《Python程序設(shè)計(jì)與案例教程》課件chap11圖形用戶界面設(shè)計(jì)_第3頁(yè)
《Python程序設(shè)計(jì)與案例教程》課件chap11圖形用戶界面設(shè)計(jì)_第4頁(yè)
《Python程序設(shè)計(jì)與案例教程》課件chap11圖形用戶界面設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩29頁(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)介

Python程序設(shè)計(jì)與案例教程第11章圖形用戶界面設(shè)計(jì)1.Tkinter:Tkinter是一款流行的跨平臺(tái)GUI工具包,是Python標(biāo)準(zhǔn)的GUI庫(kù)下載地址:/topics/thinter2.wxPython下載地址:/download.php常用的GUI工具有Tkinter、wxPython、Jython、IronPython幾種11.1圖形用戶界面設(shè)計(jì)基礎(chǔ)

GUI程序的基礎(chǔ)是根窗體(RootWindow)使用tkinter之前需要先導(dǎo)入,導(dǎo)入方式為:

import_tkinter然后再實(shí)例化tkinter模塊的Tk類,如:

root=Tk()GUI元素被稱為控件控件及類說(shuō)

明Frame承載其他GUI元素Label顯示不可編輯的文本或圖片Button用戶激活按鈕時(shí)執(zhí)行一個(gè)動(dòng)作Entry接受并顯示一行文本Text接受并顯示多行文本Checkbutton允許用戶選擇或反選一個(gè)選項(xiàng)Radiobutton允許用戶從多個(gè)選項(xiàng)中選取一個(gè)Menu與頂層窗口相關(guān)的選項(xiàng)Scrollbar滾動(dòng)其他控件的滾動(dòng)條Canvas圖形繪圖區(qū):直線、圓、照片、文字等Dialog通用對(duì)話框的標(biāo)記部分GUI核心窗口控件說(shuō)明和其對(duì)應(yīng)的tkinter類例:創(chuàng)建圖形窗口1importtkinter2win=tkinter.Tk()3win.title(string="名言警句")4b=tkinter.Label(win,text="閱讀使人充實(shí),會(huì)談使人敏捷,寫(xiě)作使人精確?!喔?)5b.pack()6win.mainloop()11.2常用控件11.2.1tkinter控件tkinter模塊包含15個(gè)tkinter控件控件名稱說(shuō)

明Button按鈕控件;在程序中顯示按鈕Canvas畫(huà)布控件;用來(lái)畫(huà)圖形,如線條、多邊形等Checkbutton多選框控件;用于在程序中提供多項(xiàng)選擇框Entry輸入控件;定義一個(gè)簡(jiǎn)單的文字輸入字段Frame框架控件;定義一個(gè)窗體,以作為其他控件的容器Label標(biāo)簽控件;定義一個(gè)文字或是圖片標(biāo)簽Listbox列表框控件;此控件定義一個(gè)下拉方塊Menu菜單控件;定義一個(gè)菜單欄、下拉菜單和彈出菜單Menubutton菜單按鈕控件;用于顯示菜單項(xiàng)Message消息控件;定義一個(gè)對(duì)話框Radiobutton單選按鈕控件;定義一個(gè)單選按鈕Scale范圍控件;定義一個(gè)滑動(dòng)條,來(lái)幫助用戶設(shè)置數(shù)值Scrollbar滾動(dòng)條控件;定義一個(gè)滾動(dòng)條Text文本控件;定義一個(gè)文本框Toplevel與Frame控件類似,可以作為其他控件的容器1.顏色名稱常量Windows操作系統(tǒng)的顏色名稱常量SystemActiveBorderSystemActiveCaptionSystemAppWorkspaceSystemBackgroundSystemButtonFaceSystemButtonHighlightSystemButtonShadowSystemButtonTextSystemCaptionTextSystemDisabledTextSystemHighlightSystemHighlightTextSystemInavtiveBorderSystemInavtiveCaptionSystemInactiveCaptionTextSystemMenuSystemMenuTextSystemScrollbarSystemWindowSystemWindowFrameSystemWindowText2.大小的測(cè)量單位測(cè)量tkinter控件內(nèi)大小時(shí),是以像素為單位的例:實(shí)現(xiàn)定義Button控件的文字與邊框之間的水平距離是20像素fromtkinterimport*win=Tk()Button(win,padx=20,text="關(guān)閉",command=win.quit).pack()win.mainloop()例:包含關(guān)閉按鈕的圖形界面1fromtkinterimport*2win=Tk()3Button(win,padx=20,text="關(guān)閉",command=win.quit).pack()4Button(win,padx="2c",text="關(guān)閉",command=win.quit).pack()5Button(win,padx="8m",text="關(guān)閉",command=win.quit).pack()6Button(win,padx="2i",text="關(guān)閉",command=win.quit).pack()7Button(win,padx="20p",text="關(guān)閉",command=win.quit).pack()8win.mainloop()3.共同屬性每一個(gè)tkinter控件都有下列共同屬性:anchor:定義控件在窗口內(nèi)的位置或者文字信息在控件內(nèi)的位置,位置可以是N、NE、E、SE、SW、W、NW或者CENTER。Background(bg):定義控件的背景顏色以及一個(gè)背景顏色為SystemHighlight的文字標(biāo)簽。bitmap:定義顯示在控件內(nèi)的bitmap圖片文件。borderwidth:定義控件的邊框?qū)挾?,單位是像素。command:當(dāng)控件有特定的動(dòng)作發(fā)生,此屬性定義動(dòng)作發(fā)生時(shí)所調(diào)用的Python函數(shù)。cursor:定義當(dāng)鼠標(biāo)指針移經(jīng)控件上時(shí)鼠標(biāo)指針的類型。font:如果控件支持標(biāo)題文字,可以使用此屬性來(lái)定義標(biāo)題文字的字體格式。允許同時(shí)設(shè)置多個(gè)字體樣式。

foreground(fg):定義控件的前景(文字)顏色。3.共同屬性(9)height:如果是Button、Label或者Text控件,此屬性定義以字符數(shù)目為單位的高度。對(duì)于其他的控件,則定義以像素(pixel)為單位的高度。(10)highlightbackground:定義控件在沒(méi)有鍵盤(pán)焦點(diǎn)時(shí),繪制highlight區(qū)域的顏色。(11)highlightcolor:定義控件在有鍵盤(pán)焦點(diǎn)時(shí),繪制highlight區(qū)域的顏色。(12)highlightthickness:定義highlight區(qū)域的寬度,以像素為單位。(13)image:定義顯示在控件內(nèi)的圖片文件。(14)ustify:定義多行的文字標(biāo)題的排列方式。(15)padx,pady:定義控件內(nèi)的文字或者圖片與控件的邊框之間的水平與垂直距離。(16)relief:定義控件的邊框形式。(17)variable:將控件的數(shù)值映像到一個(gè)變量。(18)width:如果是Button、Label或者Text控件,此屬性定義為以字符數(shù)目為單位的寬度。其他控件則定義為以像素(pixel)為單位的寬度。例:設(shè)置控件背景顏色。1fromtkinterimport*2win=Tk()3Label(win,background="#00ff00",text="曾伴浮云歸晚翠,猶陪落日泛秋聲。").pack()4Label(win,background="#00ff00",text="世間無(wú)限丹青手,一片傷心畫(huà)不成。").pack()5win.mainloop()例:設(shè)置文字標(biāo)簽的字體。1fromtkinterimport*2win=Tk()3Label(win,font=("Times",16,"bold"),text="溯洄從之,道阻且長(zhǎng)。溯游從之,宛在水中央。").pack()4Label(win,font=("細(xì)明體",24,"bolditalicunderline"),text="溯洄從之,道阻且長(zhǎng)。溯游從之,宛在水中央。").pack()5win.mainloop()11.2.2Button控件Button控件用來(lái)創(chuàng)建按鈕,按鈕內(nèi)可以顯示文字或者圖片。Button控件的方法:(1)

flash():將前景與背景顏色互換來(lái)產(chǎn)生閃爍的效果。(2)

invoke():執(zhí)行command屬性所定義的函數(shù)。Buttonwidget的屬性如下:(1)

activebackground:當(dāng)按鈕在作用中時(shí)的背景顏色。(2)

activeforeground:當(dāng)按鈕在作用中時(shí)的前景顏色。(3)

bitmap:顯示在按鈕上的位圖。(4)

default:如果設(shè)置此屬性,則此按鈕為默認(rèn)按鈕。(5)

disabledforeground:當(dāng)按鈕在無(wú)作用時(shí)的前景顏色。(6)

image:顯示在按鈕上的圖片,此屬性的順序在text與bitmap屬性之前。(7)

state:定義按鈕的狀態(tài),可以是NORMAL、ACTIVE或者DISABLED。(8)

takefocus:定義用戶是否可以使用Tab鍵,來(lái)改變按鈕的焦點(diǎn)。(9)

text:顯示在按鈕上的文字。如果定義了bitmap或者image屬性,text屬性就不會(huì)被使用。(10)

underline:一個(gè)整數(shù)偏移值,表示按鈕上的文字哪一個(gè)字符要加底線,第一個(gè)字符的偏移值是0。(11)

wraplength:一個(gè)以屏幕單位(screenunit)為單位的距離值,用來(lái)決定按鈕上的文字在哪里需要換成多行。其默認(rèn)值是不換行。例:文字上添加底線。1fromtkinterimport*2win=Tk()3Button(win,text="我的主頁(yè)",underline=0,command=win.quit).pack()4win.mainloop()11.2.3Canvas控件Canvas控件用來(lái)創(chuàng)建與顯示圖形,如弧形、位圖、圖片、線條、橢圓形、多邊形、矩形等。Canvas控件的方法如下:create_arc(coord,start,extent,fill):創(chuàng)建一個(gè)弧形。create_bitmap(x,y,bitmap):創(chuàng)建一個(gè)位圖。create_image(x,y,image):創(chuàng)建一個(gè)圖片。create_line(x0,y0,x1,y1,...,xn,yn,options):創(chuàng)建一個(gè)線條。例:繪制一個(gè)弧形,在窗口客戶區(qū)的(10,50)與(240,210)坐標(biāo)間畫(huà)一個(gè)弧形,起始角度是0度,結(jié)束角度是270度,使用紅色來(lái)填滿弧形區(qū)塊。1fromtkinterimport*2win=Tk()3coord=10,50,240,2104canvas=Canvas(win)5canvas.create_arc(coord,start=0,extent=270,fill="red")anvas.pack()6win.mainloop()例:繪制一個(gè)線條。1fromtkinterimport*2win=Tk()3canvas=Canvas(win)4canvas.create_line(10,10,40,120,230,270,width=3,fill="green")5canvas.pack()6win.mainloop()11.2.4Entry控件Entry控件用來(lái)在窗體或者窗口內(nèi)創(chuàng)建一個(gè)單行的文本框。textvariable:此屬性為用戶輸入的文字或者要顯示在Entry控件內(nèi)的文字。get():此方法可以讀取Entrywidget內(nèi)的文字。例:創(chuàng)建一個(gè)簡(jiǎn)單計(jì)算器。1fromtkinterimport*2win=Tk()3frame=Frame(win)#創(chuàng)建窗體45#創(chuàng)建一個(gè)表達(dá)式6defcalc():7result="="+str(eval(expression.get()))8label.config(text=result)910label=Label(frame) 11entry=Entry(frame) 12expression=StringVar() 13entry["textvariable"]=expression 141516button1=Button(frame,text=“等于",command=calc)17entry.focus() 18frame.pack()19entry.pack() 20label.pack(side=LEFT) 21button1.pack(side=RIGHT) 2223#開(kāi)始程序循環(huán)24frame.mainloop()11.2.5Checkbutton控件Checkbutton控件用來(lái)創(chuàng)建復(fù)選框。Checkbutton控件的屬性:onvalue,offvalue:設(shè)置Checkbutton控件的variable屬性所指定的變量所要存儲(chǔ)的數(shù)值。如果復(fù)選框沒(méi)有被勾選,此變量的值為offvalue;如果復(fù)選框被勾選,此變量的值為onvalue。indicatoron:將此屬性設(shè)置成0,可以將整個(gè)控件變成復(fù)選框。checkbutton控件的方法:select():選擇復(fù)選框,并且設(shè)置變量的值為onvalue。flash():將前景與背景顏色互換來(lái)產(chǎn)生閃爍的效果。invoke():執(zhí)行command屬性所定義的函數(shù)。toggle():改變核取按鈕的狀態(tài)。如果核取按鈕當(dāng)前的狀態(tài)是on,就改成off;反之亦然。例:創(chuàng)建3個(gè)復(fù)選框。1fromtkinterimport*2win=Tk()3check1=Checkbutton(win,text="蘋(píng)果")4check2=Checkbutton(win,text="香蕉")5check3=Checkbutton(win,text="橘子")6check1.select()7check1.pack(side=LEFT)8check2.pack(side=LEFT)9check3.pack(side=LEFT)10win.mainloop()11.3對(duì)象的布局Tkinter提供grid、pack和place三種完全不同的布局管理類:(1)pack():將控件放置在父控件內(nèi)之前,規(guī)劃此控件在區(qū)塊內(nèi)的位置。(2)grid():將控件放置在父控件內(nèi)之前,將此控件規(guī)劃成一個(gè)表格類型的架構(gòu)。(3)place():將控件放置在父控件內(nèi)的特定位置。11.3.1pack()方法pack()方法的選項(xiàng):expand:讓控件使用所有剩下的空間。fill:此選項(xiàng)決定控件如何填滿parcel的空間,可以是X、Y、BOTH或者NONE,此選項(xiàng)必須在expand等于1時(shí)才有作用。

ipadx,ipady:此選項(xiàng)與fill選項(xiàng)共同使用,來(lái)定義窗體內(nèi)的控件與窗體邊界之間的距離。

padx,pady:此選項(xiàng)定義控件之間的距離。此選項(xiàng)的單位是像素;也可以是其他測(cè)量單位,如厘米、英寸等。(5)side:此選項(xiàng)定義控件放置的位置,可以是TOP(靠上對(duì)齊)、BOTTOM(靠下對(duì)齊)、LEFT(靠左對(duì)齊)與RIGHT(靠右對(duì)齊)。11.3.2grid()方法grid()方法將控件依照表格的欄列方式來(lái)放置在窗體或者窗口內(nèi)。grid()方法的選項(xiàng):(1)row:設(shè)置控件在表格中的第幾列。(2)column:設(shè)置控件在表格中的第幾欄。(3)columnspan:設(shè)置控件在表格中合并欄的數(shù)目。(4)rowspan:設(shè)置控件在表格中合并列的數(shù)目。例:使用grid()方法創(chuàng)建一個(gè)5×5的按鈕數(shù)組。1fromtkinterimport*2#主窗口3win=Tk()4#創(chuàng)建窗體5frame=Frame(win,relief=RAISED,borderwidth=2)6frame.pack(side=TOP,fill=BOTH,ipadx=5,ipady=5,expand=1)7#創(chuàng)建按鈕數(shù)組8foriinrange(5):9forjinrange(5):10Button(frame,text="("+str(i)+","+str(j)+")").grid(row=i,column=j)11#開(kāi)始窗口的事件循環(huán)12win.mainloop()11.3.3place()方法place()方法設(shè)置控件在窗體或者窗口內(nèi)的絕對(duì)地址或者相對(duì)地址。place()方法的選項(xiàng):anchor:定義控件在窗體或者窗口內(nèi)的方位。

bordermode:定義控件的坐標(biāo)是否要考慮邊界的寬度。

height:定義控件的高度,單位是像素。

width:定義控件的寬度,單位是像素。

in(in_):定義控件相對(duì)于參考控件的位置。

relheight:定義控件相對(duì)于參考控件(使用in_選項(xiàng))的高度。

relwidth:定義控件相對(duì)于參考控件(使用in_選項(xiàng))的寬度。

relx:定義控件相對(duì)于參考控件(使用in_選項(xiàng))的水平位移。

rely:定義控件相對(duì)于參考控件(使用in_選項(xiàng))的垂直位移。

x:定義控件的絕對(duì)水平位置,默認(rèn)值是0。

y:定義控件的絕對(duì)垂直位置,默認(rèn)值是0。例:使用place()方法創(chuàng)建2個(gè)按鈕。第1個(gè)按鈕的位置在距離窗體左上角的(40,40)坐標(biāo)處,第2個(gè)按鈕的位置在距離窗體左上角的(140,80)坐標(biāo)處。按鈕的寬度是80個(gè)像素,按鈕的高度是40個(gè)像素。1fromtkinterimport*2win=Tk()3frame=Frame(win,relief=RAISED,borderwidth=2,width=400,height=300)4frame.pack(side=TOP,fill=BOTH,ipadx=5,expand=1)5button1=Button(frame,text="Button1")6button1.place(x=40,y=40,anchor=W,width=80,height=40)7button2=Button(frame,text="Button2")8button2.place(x=140,y=80,anchor=W,width=80,height=40)9win.mainloop()11.4事件處理事件指可能會(huì)發(fā)生在對(duì)象上的事,要求有相應(yīng)響應(yīng)。11.4.1事件的屬性當(dāng)有事件發(fā)生時(shí),tkinter會(huì)傳給事件處理例程一個(gè)event變量。變量名屬

性char鍵盤(pán)的字符碼,例如A鍵的char屬性等于A,F(xiàn)1鍵的char屬性無(wú)法顯示keycode鍵盤(pán)的ASCII碼,例如A鍵的keycode屬性等于65keysym鍵盤(pán)的符號(hào),例如A鍵的keysym屬性等于A,F(xiàn)1鍵的keysym屬性等于F1height,width控件的新高度與寬度,單位是像素num事件發(fā)生時(shí)的鼠標(biāo)按鍵碼widget目前的鼠標(biāo)光標(biāo)位置x,y加載和表示字體x_root,y_root相對(duì)于屏幕左上角的目前鼠標(biāo)光標(biāo)位置type顯示事件的種類11.4.2事件綁定方法用戶可以使用以下tkinter控件的方法將控件與事件綁定起來(lái):after(milliseconds[,callback[,arguments]])after_cancel(identifier)after_idle(callback,arguments)bindtags()bind(event,callback)bind_all(event,callback)bind_class(widgetclass,event,callback)

<Configure>unbind(event)unbind_all(event)

unbind_class(event)11.4.3系統(tǒng)協(xié)議協(xié)議處理例

溫馨提示

  • 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)論