Python的GUI編程課件文檔_第1頁
Python的GUI編程課件文檔_第2頁
Python的GUI編程課件文檔_第3頁
Python的GUI編程課件文檔_第4頁
Python的GUI編程課件文檔_第5頁
已閱讀5頁,還剩102頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Python語言編程導(dǎo)論第十章Python的GUI編程張晉連2016.112025/8/211.內(nèi)容提要概述GUI程序開發(fā)簡介Tkinter與主要組件Turtle庫簡介2025/8/212.一、概述使用圖形用戶界面(GUI),可以使程序更友好。Python作為一種“膠水性”語言,提供了眾多GUI開發(fā)庫的綁定,適合快速開發(fā)GUI。目前大部分開發(fā)庫還不支持Python3,且?guī)斓母滤俣炔皇呛芸?。如果使用的是Python3,可選擇的開發(fā)庫就不是很多了。目前常用的開發(fā)庫有:Python內(nèi)置的Tkinter、Graphics、Turtle等,以及非常強大的PyQT等。如果使用的是Python2,還有如wxPython、PyGTK、PMW等開發(fā)庫可以選擇。2025/8/213.本章簡要介紹以下圖形庫:Tkinter—Python標(biāo)準(zhǔn)GUITurtle—python內(nèi)置的圖形庫。2025/8/214.二、GUI程序開發(fā)簡介日常使用的大量客戶端程序都屬于GUI程序,即在一個界面上有很多功能塊,包括:標(biāo)簽、按鈕、輸入框、菜單等。開發(fā)GUI程序,首先需要有一塊空白畫面,然后在其上劃分出不同的區(qū)域,放上不同的模塊,最后完成每一個模塊的功能。2025/8/215.GUI程序開發(fā)基本步驟和過程:首先要有底層的根窗口對象,在其基礎(chǔ)上創(chuàng)建一個個小窗口對象。每一個窗口都是一個容器,可將所需的組件置于其中。每種GUI開發(fā)庫都擁有大量的組件,一個GUI程序就是由各種不同功能的組件組成的,而根窗口對象則包含了所有組件。組件本身也可以作為一個容器,它可以包含其他組件,如下拉框。這種包含其他組件的稱為父組件,反之,包含在其他組件中的組件稱為子組件。這是一種相對的概念,對于有著多層包含的情況,某組件的父組件一般指的是直接包含它的組件。2025/8/216.構(gòu)建出了GUI程序的每一個組件,只完成了程序的界面,但此時只能看不能用,需要給每一個組件添加對應(yīng)的功能。使用GUI程序時,會進行各種操作,如鼠標(biāo)移動,按下或松開鼠標(biāo)鍵,按下鍵盤按鍵等,這些操作稱為事件。每個組件對應(yīng)著一些行為,如在文本框中輸入文本,單擊按鈕等,這些也稱為事件。GUI程序啟動的時候就一直監(jiān)控這些事件,當(dāng)某個事件發(fā)生的時候,就進行對應(yīng)的處理并返回相應(yīng)的結(jié)果。因此,GUI程序是由這一整套事件驅(qū)動的,這個過程稱為事件驅(qū)動處理。2025/8/217.一個事件發(fā)生后,GUI程序捕獲該事件、作出對應(yīng)的處理并返回結(jié)果的過程稱為回調(diào)。如計算器程序,單擊了“=”按鈕之后,便產(chǎn)生了一個事件,需要計算最終的結(jié)果,程序便開始對算式進行計算,返回最終結(jié)果并顯示出來。這個計算并顯示結(jié)果的過程即為回調(diào)。當(dāng)為程序需要的每一個事件都添加完相應(yīng)的回調(diào)處理之后,整個GUI就完成了。2025/8/218.三、Tkinter與主要組件Tk是Python默認(rèn)的工具集(即圖形庫),Tkinter是Tk的Python接口,通過Tkinter可以方便地調(diào)用Tk進行圖形界面開發(fā)。Tk與其他開發(fā)庫相比,不是最強大的,模塊工具也不是非常的豐富。但它非常簡單,所提供的功能開發(fā)一般的應(yīng)用也完全夠用了,且能在大部分平臺上運行。Python自帶的IDEL也是用Tkinter開發(fā)的。Tkinter的不足之處是缺少合適的可視化界面設(shè)計工具,需要通過代碼來完成窗口設(shè)計和元素布局。2025/8/219.Tkinter中提供了較為豐富的控件,完全能滿足基本的GUI程序的需求。由于Tkinter模塊已經(jīng)在Python中內(nèi)置,所以在使用之前,只需將其導(dǎo)入即可。兩種導(dǎo)入方式為:importtkinterastk—導(dǎo)入tkinter,但沒引入任何組件,在使用時需要使用tk前綴,如需要引入按鈕,則表示為:tk.Button。fromtkinterimport*—將tkinter中的所有組件一次性引入。2025/8/2110.1、在程序中使用Tkinter利用Tkinter模塊來引用Tk構(gòu)建和運行GUI程序,通常需要5步:導(dǎo)入Tkinter模塊;創(chuàng)建一個頂層窗口;在頂層窗口的基礎(chǔ)上構(gòu)建所需要的GUI模塊和功能;將每一個模塊與底層程序代碼關(guān)聯(lián)起來;執(zhí)行主循環(huán)。2025/8/2111.Tkinter主要組件簡介組件功能Button按鈕。類似標(biāo)簽,但提供額外功能,如鼠標(biāo)按下、釋放及鍵盤操作事件Canvas畫布。提供繪圖功能(直線、橢圓、多邊形、矩形),可以包含圖形或位圖Checkbutton選擇按鈕。一組方框,可以選擇其中的任意個Radiobutton單選按鈕。一組方框,其中只有一個可被選擇Entry文本框。單行文字域,用來收集鍵盤輸入Frame框架。包含其他組件的純?nèi)萜鱈abel標(biāo)簽。用來顯示文字或圖片Listbox列表框。一個選項列表,用戶可以從中選擇Menu菜單。單擊后彈出一個選項列表,用戶可以從中選擇Menubutton菜單按鈕。用來包含菜單的組件(有下拉式、層疊式)Message消息框。類似于標(biāo)簽,但可以顯示多行文本Scale進度條。線性“滑塊”組件,可設(shè)定起始值和結(jié)束值,顯示當(dāng)前位置的精確值Scrollbar滾動條。對其支持的組件(文本域、畫布、列表框、文本框)提供滾動功能Text文本域。多行文字區(qū)域,可用來收集(或顯示)用戶輸入的文字Toplevel頂級。類似框架,但提供一個獨立的窗口容器。12.組件的共同屬性:dimensions:尺寸colors:顏色fonts:字體anchors:錨reliefstyles:浮雕式bitmaps:顯示位圖cursors:光標(biāo)的外形說明:每種組件還有其各自特有的屬性2025/8/2113.注意:Tk使用了一種包管理器來管理所有的組件,當(dāng)定義完組件之后,需要調(diào)用pack()方法來控制組件的顯示方式,若不調(diào)用pack()方法,組件將不會顯示。在交互環(huán)境下,編寫Tkinter測試代碼時,運行過Tk()(創(chuàng)建頂層窗口的函數(shù))之后即進入主循環(huán),可以看到頂層窗口。而若是運行py文件,一定要調(diào)用mainloop()方法進入主循環(huán),方可看到頂層窗口。2025/8/2114.

創(chuàng)建GUI應(yīng)用程序窗口代碼模板:2025/8/2115.2、頂層窗口頂層窗口也稱為根窗口。頂層窗口實際上是一個普通窗口,包括一個標(biāo)題欄和窗口管理器所提供的窗口裝飾部分,如最大化按鈕等。在一個Tkinter開發(fā)的應(yīng)用程序中,只需要創(chuàng)建一個頂層窗口即可,且此窗口的創(chuàng)建必須是在其他窗口創(chuàng)建之前。2025/8/2116.例10-1:創(chuàng)建頂層窗口執(zhí)行結(jié)果:2025/8/2117.3、標(biāo)簽標(biāo)簽組件可以用來顯示圖片和文本,通過在文本中添加換行符來控制換行,也可以通過控制組件的大小實現(xiàn)自動換行。例10-2:使用標(biāo)簽(Label)編寫一個程序,在程序主體中顯示“HelloWorld!”。2025/8/2118.程序及執(zhí)行結(jié)果:2025/8/2119.Label組件常用參數(shù)參數(shù)描述height組件的高度(所占行數(shù))width組件的寬度(所占字符個數(shù))fg前景字體顏色bg背景顏色justify多行文本的對齊方式,可選參數(shù)為:LEFT、CENTER、RIGHTpadx文本左右兩側(cè)的空格數(shù)(默認(rèn)為1)pady文本上下兩側(cè)的空格數(shù)(默認(rèn)為1)2025/8/2120.增加了參數(shù)后的程序及執(zhí)行結(jié)果:2025/8/2121.4、框架框架(Frame)相對于其他組件而言,它只是個容器,因為它沒有方法,但它可以捕獲鍵盤和鼠標(biāo)的事件來進行回調(diào)??蚣芤话阌米靼唤M控件的主體,且可以定制外觀。2025/8/2122.例10-3:創(chuàng)建不同樣式的框架2025/8/2123.5、按鈕按鈕組件(Button)是tkinter最常用的圖形組件之一,通過Button可以方便地與用戶進行交互。嚴(yán)格地說,按鈕(Button)也可被看作標(biāo)簽,只是它可以捕獲鍵盤和鼠標(biāo)事件。按鈕可以禁用,禁用之后的按鈕不能進行單擊等任何操作。如果將按鈕放進TAB群中,就可以使用TAB鍵來進行跳轉(zhuǎn)和定位。2025/8/2124.例10-4:創(chuàng)建按鈕示例2025/8/2125.Button組件常用參數(shù)參數(shù)描述height組件的高度(所占行數(shù))width組件的寬度(所占字符個數(shù))fg前景字體顏色bg背景顏色activebackground按鈕按下時的背景顏色activeforeground按鈕按下時的前景顏色justify多行文本的對齊方式,可選參數(shù)為:LEFT、CENTER、RIGHTpadx文本左右兩側(cè)的空格數(shù)(默認(rèn)為1)pady文本上下兩側(cè)的空格數(shù)(默認(rèn)為1)state設(shè)置組件狀態(tài),默認(rèn)為NORMAL,可設(shè)置為:DISABLED—禁用組件(必須大寫)2025/8/2126.增加了參數(shù)后的程序和執(zhí)行結(jié)果:按下“退出”按鈕:2025/8/2127.6、輸入框一個GUI程序,接收用戶的輸入幾乎是必不可少的。輸入框(Entry)組件就是用來接收用戶輸入的最基本的組件??梢詾檩斎肟蛟O(shè)置默認(rèn)值,也可以禁止用戶輸入。如果禁止輸入,用戶就不能改變輸入框中的值了。當(dāng)用戶輸入的內(nèi)容一行顯示不下的時候,輸入框會自動生成滾動條。2025/8/2128.例10-5:創(chuàng)建輸入框示例2025/8/2129.Entry參數(shù)組件常用參數(shù)參數(shù)描述height組件的高度(所占行數(shù))width組件的寬度(所占字符個數(shù))fg前景字體顏色bg背景顏色show將Entry框中的文本替換為指定字符,用于輸入密碼等,如設(shè)置show="*"state設(shè)置組件狀態(tài),默認(rèn)為NORMAL,可設(shè)置為:DISABLED—禁用組件,READONLY—只讀2025/8/2130.例10-6:將攝氏度轉(zhuǎn)換為華氏度2025/8/2131.程序執(zhí)行:2025/8/2132.7、單選按鈕單選按鈕(Radiobutton)是一組排他性的選擇框,只能從該組中選擇一個選項,當(dāng)選擇了其中一項之后便會取消其他選項的選擇。要想使用單選按鈕,必須將這一組單選按鈕與一個相同的變量關(guān)聯(lián)起來,由用戶為這個變量選擇不同的值。2025/8/2133.例10-7:創(chuàng)建單選按鈕示例2025/8/2134.Radiobutton組件常用參數(shù)參數(shù)描述variable單選按鈕索引變量,通過變量的值確定哪個單選按鈕被選中。一組單選按鈕使用同一個索引變量value單選按鈕選中時變量的值command單選按鈕選中時執(zhí)行的命令(函數(shù))2025/8/2135.8、復(fù)選按鈕與單選按鈕相對的是復(fù)選按鈕(Checkbutton)。復(fù)選按鈕之間沒有互斥作用,可以一次選擇多個。同樣地,每一個按鈕都需要與一個變量相關(guān)聯(lián),且每一個復(fù)選按鈕關(guān)聯(lián)的變量都是不同的。若像單選按鈕一樣,關(guān)聯(lián)的是同一個按鈕,則當(dāng)選中其中一個的時候,會將所有按鈕都選上??梢越o每一個復(fù)選按鈕綁定一個回調(diào),當(dāng)該選項被選中時,執(zhí)行該回調(diào)。2025/8/2136.例10-8:基本復(fù)選按鈕示例2025/8/2137.例10-9:創(chuàng)建帶“禁用”狀態(tài)的復(fù)選按鈕2025/8/2138.Checkbutton組件常用參數(shù)參數(shù)描述variable復(fù)選按鈕索引變量,通過變量的值確定哪些復(fù)選按鈕被選中。每個復(fù)選按鈕使用不同的變量,使復(fù)選按鈕之間相互獨立onvalue復(fù)選按鈕選中(有效)時變量的值offvalue復(fù)選按鈕未選中(無效)時變量的值command復(fù)選按鈕選中時執(zhí)行的命令(函數(shù))2025/8/2139.例10-10:單選按鈕及復(fù)選按鈕綜合應(yīng)用2025/8/2140.程序:2025/8/2141.2025/8/2142.說明:程序中,文字的顏色通過Radiobutton來選擇,同一時間只能選擇一個顏色。在三個Red、Blue和Green三個單選框中,定義了同樣的變量參數(shù)color,選擇不同的單選按鈕會為該變量賦予不同的字符串值,內(nèi)容即為對應(yīng)的顏色。任何單選按鈕被選中都會觸發(fā)colorChecked()函數(shù),將標(biāo)簽修改為對應(yīng)單選框表示的顏色。2025/8/2143.9、消息很多時候需要給用戶發(fā)送消息,一般內(nèi)容較多,如幫助信息等。消息(Message)控件提供了顯示多行文本的方法,且可以設(shè)置字體和背景色。Message組件提供了一個標(biāo)準(zhǔn)的方法,可以非常方便地實現(xiàn)這項功能。2025/8/2144.例10-11:創(chuàng)建消息示例2025/8/2145.10、滾動條滾動條(Scrollbar)組件可以添加至任何一個組件,一些組件在界面顯示不下時會自動添加滾動條,但可以使用滾動條組件來對其進行控制。2025/8/2146.例10-12:滾動條示例2025/8/2147.11、列表框列表框(ListBox)組件是一個選項列表,用戶可以從中選擇某一個選項。例10-12中滾動條組件中使用了列表框。2025/8/2148.例10-13:創(chuàng)建列表框示例2025/8/2149.12、消息框消息窗口(messagebox)用于彈出提示框向用戶進行告警,或讓用戶選擇下一步如何操作。消息框包括很多類型,常用的有info、warning、error、yesno、okcancel等,包含不同的圖標(biāo)、按鈕以及彈出提示音。2025/8/2150.例10-14:各種消息框應(yīng)用2025/8/2151.源程序:2025/8/2152.2025/8/2153.13、繪圖組件繪圖組件(Canvas—畫布)可以在GUI中實現(xiàn)2D圖形的繪制,相當(dāng)于畫圖板。組件內(nèi)置了多種繪圖函數(shù),可以通過簡單的2D坐標(biāo)繪制直線、矩形、圓形、多邊形等。2025/8/2154.例10-15:繪圖應(yīng)用2025/8/2155.程序執(zhí)行:2025/8/2156.說明:直線(line),即線段,通過兩個端點定義。坐標(biāo)順序為x1、y1、x2、y2。矩形(rectangle)通過對角線上的兩個點來定義。需要注意的是Canvas中沒有畫圓函數(shù),這里通過繪制橢圓間接實現(xiàn)了繪制圓形的函數(shù)drawCircle()。橢圓(oval)是通過外切矩形的對角線兩點來定義的。2025/8/2157.例10-16:畫布顯示文字、圖片和圖形2025/8/2158.例10-17:控制圖形移動2025/8/2159.用鍵盤的上、下、左、右鍵可移動紅色方塊2025/8/2160.例10-18:編程實現(xiàn)簡易聊天窗口GUI聊天窗口布局:左上:聊天歷史信息顯示左中:當(dāng)前信息編輯區(qū)域左下:按鈕區(qū)域右側(cè):信息顯示區(qū)域2025/8/2161.

Frame控件:容器區(qū)域布局:frmLT、frmLC、frmLB、frmRT2025/8/2162.

統(tǒng)一控件對象命名規(guī)則:“控件類型”+“功能”frmLT,frame+LeftToptxtMsg,text控件+消息btnSend,button控件+發(fā)送2025/8/2163.窗口控件:txtMsgLIsttxtMsglblImagebtnSend

btnCancel

2025/8/2164.創(chuàng)建各窗口控件:2025/8/2165.

sendMsg()回調(diào)函數(shù)功能:在消息框列表輸出歷史消息,同時將當(dāng)前時間、當(dāng)前信息作為最后一條歷史消息。然后刪除消息發(fā)送框的內(nèi)容。2025/8/2166.sendMsgEvent():cancelMsg():2025/8/2167.

grid()方法:界面上控件的布局2025/8/2168.

grid()方法:界面上控件的布局2025/8/2169.源程序:2025/8/2170.2025/8/2171.課堂練習(xí)一:課堂練習(xí)一2025/8/2172.四、Turtle庫簡介Turtle庫是Python語言中一個很流行的繪制圖像的函數(shù)庫。使用turtle庫,可想象為一個小烏龜,在一個橫軸為x、縱軸為y的坐標(biāo)系原點,(0,0—中心)位置開始,方向向右。它根據(jù)一組函數(shù)指令的控制,在這個平面坐標(biāo)系中移動,從而在它爬行的路徑上繪制了圖形。詳細(xì)信息見:/3/library/turtle.html2025/8/2173.

1、控制畫筆繪制狀態(tài)方法方法名稱方法含義pendown() 放下畫筆,移到指定點后繼續(xù)繪制penup() 提起畫筆,用于另起一個地方繪制時用,與pendown()配對使用 pensize(width) 設(shè)置畫筆線條的粗細(xì)為指定大小 2025/8/2174.2、turtle運動方法方法名稱方法含義forward() 沿著當(dāng)前方向前進指定距離 backward() 沿著當(dāng)前相反方向后退指定距離 right(angle) 向右旋轉(zhuǎn)angle角度 left(angle) 向左旋轉(zhuǎn)angle角度goto(x,y) 移動到絕對坐標(biāo)(x,y)處 setx() 將當(dāng)前x軸移動到指定位置 sety() 將當(dāng)前y軸移動到指定位置 setheading(angle)設(shè)置當(dāng)前朝向為angle角度(0表示向東,90表示向北,180表示向西,270表示向南) home() 設(shè)置當(dāng)前畫筆位置為原點,朝向東。 circle() 繪制一個指定半徑,角度、以及步驟的圓圈 dot(r,color) 繪制一個指定直徑和顏色的圓點 undo() 撤銷畫筆最后一步動作 speed() 設(shè)置畫筆的繪制速度,參數(shù)為0-10之間 2025/8/2175.例10-19:應(yīng)用circle方法繪制圖形2025/8/2176.3、Turtle顏色和字體繪制方法方法名稱 方法含義color() 設(shè)置畫筆的顏色 begin_fill() 填充圖形前,調(diào)用該方法 end_fill() 填充圖形結(jié)束 filling() 返回填充的狀態(tài),True為填充,F(xiàn)alse為未填充clear() 清空當(dāng)前窗口,但不改變當(dāng)前畫筆的位置 reset() 清空當(dāng)前窗口,并重置位置等狀態(tài)為默認(rèn)值 screensize() 設(shè)置畫布的長和寬 hideturtle() 隱藏畫筆的turtle形狀 showturtle() 顯示畫筆的turtle形狀 isvisible() 如果turtle可見,則返回True write(str,font=None) 輸出font字體的字符串 2025/8/2177.例10-20:修改例10-19,給所繪圖形填充顏色2025/8/2178.執(zhí)行結(jié)果:2025/8/2179.例10-21:編寫程序模擬時鐘,要求時鐘根據(jù)計算機系統(tǒng)時間實時動態(tài)更新。2025/8/2180.需要建立五個turtle對象:1個turtle:繪制外表盤3個turle:模擬表針行為1個turtle:輸出表盤上的文字2025/8/2181.

模擬時鐘程序過程:第一步:建立Turtle對象并初始化。表盤繪制Turtle對象文本輸出Turtle對象3個指針Turtle對象第二步:靜態(tài)表盤繪制第三步:根據(jù)時鐘更新表針位置和時間信息說明:需要導(dǎo)入turtle庫和datetime庫2025/8/2182.

表盤繪制函數(shù)SetupClock(radius):2025/8/2183.

溫馨提示

  • 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

提交評論