




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2023/1/21Python語(yǔ)言編程導(dǎo)論第十章Python的GUI編程張晉連2016.112022/12/121Python語(yǔ)言編程導(dǎo)論第十章Py內(nèi)容提要概述GUI程序開(kāi)發(fā)簡(jiǎn)介Tkinter與主要組件Turtle庫(kù)簡(jiǎn)介2023/1/22內(nèi)容提要概述2022/12/122一、概述使用圖形用戶界面(GUI),可以使程序更友好。Python作為一種“膠水性”語(yǔ)言,提供了眾多GUI開(kāi)發(fā)庫(kù)的綁定,適合快速開(kāi)發(fā)GUI。目前大部分開(kāi)發(fā)庫(kù)還不支持Python3,且?guī)斓母滤俣炔皇呛芸臁H绻褂玫氖荘ython3,可選擇的開(kāi)發(fā)庫(kù)就不是很多了。目前常用的開(kāi)發(fā)庫(kù)有:Python內(nèi)置的Tkinter、Graphics、Turtle等,以及非常強(qiáng)大的PyQT等。如果使用的是Python2,還有如wxPython、PyGTK、PMW等開(kāi)發(fā)庫(kù)可以選擇。2023/1/23一、概述使用圖形用戶界面(GUI),可以使程序更友好。202本章簡(jiǎn)要介紹以下圖形庫(kù):Tkinter—Python標(biāo)準(zhǔn)GUITurtle—python內(nèi)置的圖形庫(kù)。2023/1/24本章簡(jiǎn)要介紹以下圖形庫(kù):Tkinter—Python標(biāo)準(zhǔn)G二、GUI程序開(kāi)發(fā)簡(jiǎn)介日常使用的大量客戶端程序都屬于GUI程序,即在一個(gè)界面上有很多功能塊,包括:標(biāo)簽、按鈕、輸入框、菜單等。開(kāi)發(fā)GUI程序,首先需要有一塊空白畫(huà)面,然后在其上劃分出不同的區(qū)域,放上不同的模塊,最后完成每一個(gè)模塊的功能。2023/1/25二、GUI程序開(kāi)發(fā)簡(jiǎn)介日常使用的大量客戶端程序都屬于GUI程GUI程序開(kāi)發(fā)基本步驟和過(guò)程:首先要有底層的根窗口對(duì)象,在其基礎(chǔ)上創(chuàng)建一個(gè)個(gè)小窗口對(duì)象。每一個(gè)窗口都是一個(gè)容器,可將所需的組件置于其中。每種GUI開(kāi)發(fā)庫(kù)都擁有大量的組件,一個(gè)GUI程序就是由各種不同功能的組件組成的,而根窗口對(duì)象則包含了所有組件。組件本身也可以作為一個(gè)容器,它可以包含其他組件,如下拉框。這種包含其他組件的稱為父組件,反之,包含在其他組件中的組件稱為子組件。這是一種相對(duì)的概念,對(duì)于有著多層包含的情況,某組件的父組件一般指的是直接包含它的組件。2023/1/26GUI程序開(kāi)發(fā)基本步驟和過(guò)程:首先要有底層的根窗口對(duì)象,在其2023/1/27構(gòu)建出了GUI程序的每一個(gè)組件,只完成了程序的界面,但此時(shí)只能看不能用,需要給每一個(gè)組件添加對(duì)應(yīng)的功能。使用GUI程序時(shí),會(huì)進(jìn)行各種操作,如鼠標(biāo)移動(dòng),按下或松開(kāi)鼠標(biāo)鍵,按下鍵盤按鍵等,這些操作稱為事件。每個(gè)組件對(duì)應(yīng)著一些行為,如在文本框中輸入文本,單擊按鈕等,這些也稱為事件。GUI程序啟動(dòng)的時(shí)候就一直監(jiān)控這些事件,當(dāng)某個(gè)事件發(fā)生的時(shí)候,就進(jìn)行對(duì)應(yīng)的處理并返回相應(yīng)的結(jié)果。因此,GUI程序是由這一整套事件驅(qū)動(dòng)的,這個(gè)過(guò)程稱為事件驅(qū)動(dòng)處理。2022/12/127構(gòu)建出了GUI程序的每一個(gè)組件,只完成2023/1/28一個(gè)事件發(fā)生后,GUI程序捕獲該事件、作出對(duì)應(yīng)的處理并返回結(jié)果的過(guò)程稱為回調(diào)。如計(jì)算器程序,單擊了“=”按鈕之后,便產(chǎn)生了一個(gè)事件,需要計(jì)算最終的結(jié)果,程序便開(kāi)始對(duì)算式進(jìn)行計(jì)算,返回最終結(jié)果并顯示出來(lái)。這個(gè)計(jì)算并顯示結(jié)果的過(guò)程即為回調(diào)。當(dāng)為程序需要的每一個(gè)事件都添加完相應(yīng)的回調(diào)處理之后,整個(gè)GUI就完成了。2022/12/128一個(gè)事件發(fā)生后,GUI程序捕獲該事件、三、Tkinter與主要組件Tk是Python默認(rèn)的工具集(即圖形庫(kù)),Tkinter是Tk的Python接口,通過(guò)Tkinter可以方便地調(diào)用Tk進(jìn)行圖形界面開(kāi)發(fā)。Tk與其他開(kāi)發(fā)庫(kù)相比,不是最強(qiáng)大的,模塊工具也不是非常的豐富。但它非常簡(jiǎn)單,所提供的功能開(kāi)發(fā)一般的應(yīng)用也完全夠用了,且能在大部分平臺(tái)上運(yùn)行。Python自帶的IDEL也是用Tkinter開(kāi)發(fā)的。Tkinter的不足之處是缺少合適的可視化界面設(shè)計(jì)工具,需要通過(guò)代碼來(lái)完成窗口設(shè)計(jì)和元素布局。2023/1/29三、Tkinter與主要組件Tk是Python默認(rèn)的工具集(2023/1/210Tkinter中提供了較為豐富的控件,完全能滿足基本的GUI程序的需求。由于Tkinter模塊已經(jīng)在Python中內(nèi)置,所以在使用之前,只需將其導(dǎo)入即可。兩種導(dǎo)入方式為:importtkinterastk—導(dǎo)入tkinter,但沒(méi)引入任何組件,在使用時(shí)需要使用tk前綴,如需要引入按鈕,則表示為:tk.Button。fromtkinterimport*—將tkinter中的所有組件一次性引入。2022/12/1210Tkinter中提供了較為豐富的控件1、在程序中使用Tkinter利用Tkinter模塊來(lái)引用Tk構(gòu)建和運(yùn)行GUI程序,通常需要5步:導(dǎo)入Tkinter模塊;創(chuàng)建一個(gè)頂層窗口;在頂層窗口的基礎(chǔ)上構(gòu)建所需要的GUI模塊和功能;將每一個(gè)模塊與底層程序代碼關(guān)聯(lián)起來(lái);執(zhí)行主循環(huán)。2023/1/2111、在程序中使用Tkinter利用Tkinter模塊來(lái)引用TTkinter主要組件簡(jiǎn)介組件功能Button按鈕。類似標(biāo)簽,但提供額外功能,如鼠標(biāo)按下、釋放及鍵盤操作事件Canvas畫(huà)布。提供繪圖功能(直線、橢圓、多邊形、矩形),可以包含圖形或位圖Checkbutton選擇按鈕。一組方框,可以選擇其中的任意個(gè)Radiobutton單選按鈕。一組方框,其中只有一個(gè)可被選擇Entry文本框。單行文字域,用來(lái)收集鍵盤輸入Frame框架。包含其他組件的純?nèi)萜鱈abel標(biāo)簽。用來(lái)顯示文字或圖片Listbox列表框。一個(gè)選項(xiàng)列表,用戶可以從中選擇Menu菜單。單擊后彈出一個(gè)選項(xiàng)列表,用戶可以從中選擇Menubutton菜單按鈕。用來(lái)包含菜單的組件(有下拉式、層疊式)Message消息框。類似于標(biāo)簽,但可以顯示多行文本Scale進(jìn)度條。線性“滑塊”組件,可設(shè)定起始值和結(jié)束值,顯示當(dāng)前位置的精確值Scrollbar滾動(dòng)條。對(duì)其支持的組件(文本域、畫(huà)布、列表框、文本框)提供滾動(dòng)功能Text文本域。多行文字區(qū)域,可用來(lái)收集(或顯示)用戶輸入的文字Toplevel頂級(jí)。類似框架,但提供一個(gè)獨(dú)立的窗口容器。12Tkinter主要組件簡(jiǎn)介組件功能Button按鈕。類似標(biāo)簽組件的共同屬性:dimensions:尺寸colors:顏色fonts:字體anchors:錨reliefstyles:浮雕式bitmaps:顯示位圖cursors:光標(biāo)的外形說(shuō)明:每種組件還有其各自特有的屬性2023/1/213組件的共同屬性:dimensions:尺寸2022/12注意:Tk使用了一種包管理器來(lái)管理所有的組件,當(dāng)定義完組件之后,需要調(diào)用pack()方法來(lái)控制組件的顯示方式,若不調(diào)用pack()方法,組件將不會(huì)顯示。在交互環(huán)境下,編寫(xiě)Tkinter測(cè)試代碼時(shí),運(yùn)行過(guò)Tk()(創(chuàng)建頂層窗口的函數(shù))之后即進(jìn)入主循環(huán),可以看到頂層窗口。而若是運(yùn)行py文件,一定要調(diào)用mainloop()方法進(jìn)入主循環(huán),方可看到頂層窗口。2023/1/214注意:Tk使用了一種包管理器來(lái)管理所有的組件,當(dāng)定義完組件之
創(chuàng)建GUI應(yīng)用程序窗口代碼模板:2023/1/215
創(chuàng)建GUI應(yīng)用程序窗口代碼模板:2022/12/12152、頂層窗口頂層窗口也稱為根窗口。頂層窗口實(shí)際上是一個(gè)普通窗口,包括一個(gè)標(biāo)題欄和窗口管理器所提供的窗口裝飾部分,如最大化按鈕等。在一個(gè)Tkinter開(kāi)發(fā)的應(yīng)用程序中,只需要?jiǎng)?chuàng)建一個(gè)頂層窗口即可,且此窗口的創(chuàng)建必須是在其他窗口創(chuàng)建之前。2023/1/2162、頂層窗口頂層窗口也稱為根窗口。2022/12/1216例10-1:創(chuàng)建頂層窗口2023/1/217執(zhí)行結(jié)果:例10-1:創(chuàng)建頂層窗口2022/12/1217執(zhí)行結(jié)果:3、標(biāo)簽標(biāo)簽組件可以用來(lái)顯示圖片和文本,通過(guò)在文本中添加換行符來(lái)控制換行,也可以通過(guò)控制組件的大小實(shí)現(xiàn)自動(dòng)換行。例10-2:使用標(biāo)簽(Label)編寫(xiě)一個(gè)程序,在程序主體中顯示“HelloWorld!”。2023/1/2183、標(biāo)簽標(biāo)簽組件可以用來(lái)顯示圖片和文本,通過(guò)在文本中添加換行程序及執(zhí)行結(jié)果:2023/1/219程序及執(zhí)行結(jié)果:2022/12/1219Label組件常用參數(shù)參數(shù)描述height組件的高度(所占行數(shù))width組件的寬度(所占字符個(gè)數(shù))fg前景字體顏色bg背景顏色justify多行文本的對(duì)齊方式,可選參數(shù)為:LEFT、CENTER、RIGHTpadx文本左右兩側(cè)的空格數(shù)(默認(rèn)為1)pady文本上下兩側(cè)的空格數(shù)(默認(rèn)為1)2023/1/220Label組件常用參數(shù)參數(shù)描述height組件的高度(所占行增加了參數(shù)后的程序及執(zhí)行結(jié)果:2023/1/221增加了參數(shù)后的程序及執(zhí)行結(jié)果:2022/12/12214、框架框架(Frame)相對(duì)于其他組件而言,它只是個(gè)容器,因?yàn)樗鼪](méi)有方法,但它可以捕獲鍵盤和鼠標(biāo)的事件來(lái)進(jìn)行回調(diào)??蚣芤话阌米靼唤M控件的主體,且可以定制外觀。2023/1/2224、框架框架(Frame)相對(duì)于其他組件而言,它只是個(gè)容器,例10-3:創(chuàng)建不同樣式的框架2023/1/223例10-3:創(chuàng)建不同樣式的框架2022/12/12235、按鈕按鈕組件(Button)是tkinter最常用的圖形組件之一,通過(guò)Button可以方便地與用戶進(jìn)行交互。嚴(yán)格地說(shuō),按鈕(Button)也可被看作標(biāo)簽,只是它可以捕獲鍵盤和鼠標(biāo)事件。按鈕可以禁用,禁用之后的按鈕不能進(jìn)行單擊等任何操作。如果將按鈕放進(jìn)TAB群中,就可以使用TAB鍵來(lái)進(jìn)行跳轉(zhuǎn)和定位。2023/1/2245、按鈕按鈕組件(Button)是tkinter最常用的圖形例10-4:創(chuàng)建按鈕示例2023/1/225例10-4:創(chuàng)建按鈕示例2022/12/1225Button組件常用參數(shù)參數(shù)描述height組件的高度(所占行數(shù))width組件的寬度(所占字符個(gè)數(shù))fg前景字體顏色bg背景顏色activebackground按鈕按下時(shí)的背景顏色activeforeground按鈕按下時(shí)的前景顏色justify多行文本的對(duì)齊方式,可選參數(shù)為:LEFT、CENTER、RIGHTpadx文本左右兩側(cè)的空格數(shù)(默認(rèn)為1)pady文本上下兩側(cè)的空格數(shù)(默認(rèn)為1)state設(shè)置組件狀態(tài),默認(rèn)為NORMAL,可設(shè)置為:DISABLED—禁用組件(必須大寫(xiě))2023/1/226Button組件常用參數(shù)參數(shù)描述height組件的高度(所占增加了參數(shù)后的程序和執(zhí)行結(jié)果:2023/1/227按下“退出”按鈕:增加了參數(shù)后的程序和執(zhí)行結(jié)果:2022/12/1227按下“6、輸入框一個(gè)GUI程序,接收用戶的輸入幾乎是必不可少的。輸入框(Entry)組件就是用來(lái)接收用戶輸入的最基本的組件??梢詾檩斎肟蛟O(shè)置默認(rèn)值,也可以禁止用戶輸入。如果禁止輸入,用戶就不能改變輸入框中的值了。當(dāng)用戶輸入的內(nèi)容一行顯示不下的時(shí)候,輸入框會(huì)自動(dòng)生成滾動(dòng)條。2023/1/2286、輸入框一個(gè)GUI程序,接收用戶的輸入幾乎是必不可少的。輸例10-5:創(chuàng)建輸入框示例2023/1/229例10-5:創(chuàng)建輸入框示例2022/12/1229Entry參數(shù)組件常用參數(shù)參數(shù)描述height組件的高度(所占行數(shù))width組件的寬度(所占字符個(gè)數(shù))fg前景字體顏色bg背景顏色show將Entry框中的文本替換為指定字符,用于輸入密碼等,如設(shè)置show="*"state設(shè)置組件狀態(tài),默認(rèn)為NORMAL,可設(shè)置為:DISABLED—禁用組件,READONLY—只讀2023/1/230Entry參數(shù)組件常用參數(shù)參數(shù)描述height組件的高度(所例10-6:將攝氏度轉(zhuǎn)換為華氏度2023/1/231例10-6:將攝氏度轉(zhuǎn)換為華氏度2022/12/1231程序執(zhí)行:2023/1/232程序執(zhí)行:2022/12/12327、單選按鈕單選按鈕(Radiobutton)是一組排他性的選擇框,只能從該組中選擇一個(gè)選項(xiàng),當(dāng)選擇了其中一項(xiàng)之后便會(huì)取消其他選項(xiàng)的選擇。要想使用單選按鈕,必須將這一組單選按鈕與一個(gè)相同的變量關(guān)聯(lián)起來(lái),由用戶為這個(gè)變量選擇不同的值。2023/1/2337、單選按鈕單選按鈕(Radiobutton)是一組排他性的例10-7:創(chuàng)建單選按鈕示例2023/1/234例10-7:創(chuàng)建單選按鈕示例2022/12/1234Radiobutton組件常用參數(shù)參數(shù)描述variable單選按鈕索引變量,通過(guò)變量的值確定哪個(gè)單選按鈕被選中。一組單選按鈕使用同一個(gè)索引變量value單選按鈕選中時(shí)變量的值command單選按鈕選中時(shí)執(zhí)行的命令(函數(shù))2023/1/235Radiobutton組件常用參數(shù)參數(shù)描述variable單8、復(fù)選按鈕與單選按鈕相對(duì)的是復(fù)選按鈕(Checkbutton)。復(fù)選按鈕之間沒(méi)有互斥作用,可以一次選擇多個(gè)。同樣地,每一個(gè)按鈕都需要與一個(gè)變量相關(guān)聯(lián),且每一個(gè)復(fù)選按鈕關(guān)聯(lián)的變量都是不同的。若像單選按鈕一樣,關(guān)聯(lián)的是同一個(gè)按鈕,則當(dāng)選中其中一個(gè)的時(shí)候,會(huì)將所有按鈕都選上??梢越o每一個(gè)復(fù)選按鈕綁定一個(gè)回調(diào),當(dāng)該選項(xiàng)被選中時(shí),執(zhí)行該回調(diào)。2023/1/2368、復(fù)選按鈕與單選按鈕相對(duì)的是復(fù)選按鈕(Checkbutto例10-8:基本復(fù)選按鈕示例2023/1/237例10-8:基本復(fù)選按鈕示例2022/12/1237例10-9:創(chuàng)建帶“禁用”狀態(tài)的復(fù)選按鈕2023/1/238例10-9:創(chuàng)建帶“禁用”狀態(tài)的復(fù)選按鈕2022/12/12Checkbutton組件常用參數(shù)參數(shù)描述variable復(fù)選按鈕索引變量,通過(guò)變量的值確定哪些復(fù)選按鈕被選中。每個(gè)復(fù)選按鈕使用不同的變量,使復(fù)選按鈕之間相互獨(dú)立onvalue復(fù)選按鈕選中(有效)時(shí)變量的值offvalue復(fù)選按鈕未選中(無(wú)效)時(shí)變量的值command復(fù)選按鈕選中時(shí)執(zhí)行的命令(函數(shù))2023/1/239Checkbutton組件常用參數(shù)參數(shù)描述variable復(fù)例10-10:?jiǎn)芜x按鈕及復(fù)選按鈕綜合應(yīng)用2023/1/240例10-10:?jiǎn)芜x按鈕及復(fù)選按鈕綜合應(yīng)用2022/12/12程序:2023/1/241程序:2022/12/12412023/1/2422022/12/1242說(shuō)明:程序中,文字的顏色通過(guò)Radiobutton來(lái)選擇,同一時(shí)間只能選擇一個(gè)顏色。在三個(gè)Red、Blue和Green三個(gè)單選框中,定義了同樣的變量參數(shù)color,選擇不同的單選按鈕會(huì)為該變量賦予不同的字符串值,內(nèi)容即為對(duì)應(yīng)的顏色。任何單選按鈕被選中都會(huì)觸發(fā)colorChecked()函數(shù),將標(biāo)簽修改為對(duì)應(yīng)單選框表示的顏色。2023/1/243說(shuō)明:程序中,文字的顏色通過(guò)Radiobutton來(lái)選擇,同9、消息很多時(shí)候需要給用戶發(fā)送消息,一般內(nèi)容較多,如幫助信息等。消息(Message)控件提供了顯示多行文本的方法,且可以設(shè)置字體和背景色。Message組件提供了一個(gè)標(biāo)準(zhǔn)的方法,可以非常方便地實(shí)現(xiàn)這項(xiàng)功能。2023/1/2449、消息很多時(shí)候需要給用戶發(fā)送消息,一般內(nèi)容較多,如幫助信息例10-11:創(chuàng)建消息示例2023/1/245例10-11:創(chuàng)建消息示例2022/12/124510、滾動(dòng)條滾動(dòng)條(Scrollbar)組件可以添加至任何一個(gè)組件,一些組件在界面顯示不下時(shí)會(huì)自動(dòng)添加滾動(dòng)條,但可以使用滾動(dòng)條組件來(lái)對(duì)其進(jìn)行控制。2023/1/24610、滾動(dòng)條滾動(dòng)條(Scrollbar)組件可以添加至任何一例10-12:滾動(dòng)條示例2023/1/247例10-12:滾動(dòng)條示例2022/12/124711、列表框列表框(ListBox)組件是一個(gè)選項(xiàng)列表,用戶可以從中選擇某一個(gè)選項(xiàng)。例10-12中滾動(dòng)條組件中使用了列表框。2023/1/24811、列表框列表框(ListBox)組件是一個(gè)選項(xiàng)列表,用戶例10-13:創(chuàng)建列表框示例2023/1/249例10-13:創(chuàng)建列表框示例2022/12/124912、消息框消息窗口(messagebox)用于彈出提示框向用戶進(jìn)行告警,或讓用戶選擇下一步如何操作。消息框包括很多類型,常用的有info、warning、error、yesno、okcancel等,包含不同的圖標(biāo)、按鈕以及彈出提示音。2023/1/25012、消息框消息窗口(messagebox)用于彈出提示框向例10-14:各種消息框應(yīng)用2023/1/251例10-14:各種消息框應(yīng)用2022/12/1251源程序:2023/1/252源程序:2022/12/12522023/1/2532022/12/125313、繪圖組件繪圖組件(Canvas—畫(huà)布)可以在GUI中實(shí)現(xiàn)2D圖形的繪制,相當(dāng)于畫(huà)圖板。組件內(nèi)置了多種繪圖函數(shù),可以通過(guò)簡(jiǎn)單的2D坐標(biāo)繪制直線、矩形、圓形、多邊形等。2023/1/25413、繪圖組件繪圖組件(Canvas—畫(huà)布)可以在GUI中實(shí)例10-15:繪圖應(yīng)用2023/1/255例10-15:繪圖應(yīng)用2022/12/1255程序執(zhí)行:2023/1/256程序執(zhí)行:2022/12/1256說(shuō)明:直線(line),即線段,通過(guò)兩個(gè)端點(diǎn)定義。坐標(biāo)順序?yàn)閤1、y1、x2、y2。矩形(rectangle)通過(guò)對(duì)角線上的兩個(gè)點(diǎn)來(lái)定義。需要注意的是Canvas中沒(méi)有畫(huà)圓函數(shù),這里通過(guò)繪制橢圓間接實(shí)現(xiàn)了繪制圓形的函數(shù)drawCircle()。橢圓(oval)是通過(guò)外切矩形的對(duì)角線兩點(diǎn)來(lái)定義的。2023/1/257說(shuō)明:直線(line),即線段,通過(guò)兩個(gè)端點(diǎn)定義。坐標(biāo)順序?yàn)槔?0-16:畫(huà)布顯示文字、圖片和圖形2023/1/258例10-16:畫(huà)布顯示文字、圖片和圖形2022/12/125例10-17:控制圖形移動(dòng)2023/1/259例10-17:控制圖形移動(dòng)2022/12/1259用鍵盤的上、下、左、右鍵可移動(dòng)紅色方塊2023/1/260用鍵盤的上、下、左、右鍵可移動(dòng)紅色方塊2022/12/126例10-18:編程實(shí)現(xiàn)簡(jiǎn)易聊天窗口GUI聊天窗口布局:左上:聊天歷史信息顯示左中:當(dāng)前信息編輯區(qū)域左下:按鈕區(qū)域右側(cè):信息顯示區(qū)域2023/1/261例10-18:編程實(shí)現(xiàn)簡(jiǎn)易聊天窗口GUI聊天窗口布局:202
Frame控件:容器區(qū)域布局:frmLT、frmLC、frmLB、frmRT2023/1/262
Frame控件:容器區(qū)域布局:2022/12/1262
統(tǒng)一控件對(duì)象命名規(guī)則:“控件類型”+“功能”frmLT,frame+LeftToptxtMsg,text控件+消息btnSend,button控件+發(fā)送2023/1/263
統(tǒng)一控件對(duì)象命名規(guī)則:“控件類型”+“功能”2022/窗口控件:2023/1/264txtMsgLIsttxtMsglblImagebtnSend
btnCancel
窗口控件:2022/12/1264txtMsgLIsttx創(chuàng)建各窗口控件:2023/1/265創(chuàng)建各窗口控件:2022/12/1265
sendMsg()回調(diào)函數(shù)功能:在消息框列表輸出歷史消息,同時(shí)將當(dāng)前時(shí)間、當(dāng)前信息作為最后一條歷史消息。然后刪除消息發(fā)送框的內(nèi)容。2023/1/266
sendMsg()回調(diào)函數(shù)2022/12/12662023/1/267sendMsgEvent():cancelMsg():2022/12/1267sendMsgEvent():
grid()方法:界面上控件的布局2023/1/268
grid()方法:界面上控件的布局2022/12/126
grid()方法:界面上控件的布局2023/1/269
grid()方法:界面上控件的布局2022/12/126源程序:2023/1/270源程序:2022/12/12702023/1/2712022/12/1271課堂練習(xí)一:課堂練習(xí)一2023/1/272課堂練習(xí)一:課堂練習(xí)一2022/12/1272四、Turtle庫(kù)簡(jiǎn)介Turtle庫(kù)是Python語(yǔ)言中一個(gè)很流行的繪制圖像的函數(shù)庫(kù)。使用turtle庫(kù),可想象為一個(gè)小烏龜,在一個(gè)橫軸為x、縱軸為y的坐標(biāo)系原點(diǎn),(0,0—中心)位置開(kāi)始,方向向右。它根據(jù)一組函數(shù)指令的控制,在這個(gè)平面坐標(biāo)系中移動(dòng),從而在它爬行的路徑上繪制了圖形。詳細(xì)信息見(jiàn):/3/library/turtle.html2023/1/273四、Turtle庫(kù)簡(jiǎn)介Turtle庫(kù)是Python語(yǔ)言中一個(gè)
1、控制畫(huà)筆繪制狀態(tài)方法方法名稱方法含義pendown() 放下畫(huà)筆,移到指定點(diǎn)后繼續(xù)繪制penup() 提起畫(huà)筆,用于另起一個(gè)地方繪制時(shí)用,與pendown()配對(duì)使用 pensize(width) 設(shè)置畫(huà)筆線條的粗細(xì)為指定大小 2023/1/274
1、控制畫(huà)筆繪制狀態(tài)方法方法名稱方法含義pendown(2、turtle運(yùn)動(dòng)方法方法名稱方法含義forward() 沿著當(dāng)前方向前進(jìn)指定距離 backward() 沿著當(dāng)前相反方向后退指定距離 right(angle) 向右旋轉(zhuǎn)angle角度 left(angle) 向左旋轉(zhuǎn)angle角度goto(x,y) 移動(dòng)到絕對(duì)坐標(biāo)(x,y)處 setx() 將當(dāng)前x軸移動(dòng)到指定位置 sety() 將當(dāng)前y軸移動(dòng)到指定位置 setheading(angle)設(shè)置當(dāng)前朝向?yàn)閍ngle角度(0表示向東,90表示向北,180表示向西,270表示向南) home() 設(shè)置當(dāng)前畫(huà)筆位置為原點(diǎn),朝向東。 circle() 繪制一個(gè)指定半徑,角度、以及步驟的圓圈 dot(r,color) 繪制一個(gè)指定直徑和顏色的圓點(diǎn) undo() 撤銷畫(huà)筆最后一步動(dòng)作 speed() 設(shè)置畫(huà)筆的繪制速度,參數(shù)為0-10之間 2023/1/2752、turtle運(yùn)動(dòng)方法方法名稱方法含義forward()例10-19:應(yīng)用circle方法繪制圖形2023/1/276例10-19:應(yīng)用circle方法繪制圖形2022/12/3、Turtle顏色和字體繪制方法方法名稱 方法含義color() 設(shè)置畫(huà)筆的顏色 begin_fill() 填充圖形前,調(diào)用該方法 end_fill() 填充圖形結(jié)束 filling() 返回填充的狀態(tài),True為填充,F(xiàn)alse為未填充clear() 清空當(dāng)前窗口,但不改變當(dāng)前畫(huà)筆的位置 reset() 清空當(dāng)前窗口,并重置位置等狀態(tài)為默認(rèn)值 screensize() 設(shè)置畫(huà)布的長(zhǎng)和寬 hideturtle() 隱藏畫(huà)筆的turtle形狀 showturtle() 顯示畫(huà)筆的turtle形狀 isvisible() 如果turtle可見(jiàn),則返回True write(str,font=None) 輸出font字體的字符串 2023/1/2773、Turtle顏色和字體繪制方法方法名稱 方法含義co例10-20:修改例10-19,給所繪圖形填充顏色2023/1/278例10-20:修改例10-19,給所繪圖形填充顏色2022/執(zhí)行結(jié)果:2023/1/279執(zhí)行結(jié)果:2022/12/1279例10-21:編寫(xiě)程序模擬時(shí)鐘,要求時(shí)鐘根據(jù)計(jì)算機(jī)系統(tǒng)時(shí)間實(shí)時(shí)動(dòng)態(tài)更新。2023/1/280例10-21:編寫(xiě)程序模擬時(shí)鐘,要求時(shí)鐘根據(jù)計(jì)算機(jī)系統(tǒng)時(shí)間實(shí)需要建立五個(gè)turtle對(duì)象:1個(gè)turtle:繪制外表盤3個(gè)turle:模擬表針行為1個(gè)turtle:輸出表盤上的文字2023/1/281需要建立五個(gè)turtle對(duì)象:1個(gè)turtle:繪制外表盤
模擬時(shí)鐘程序過(guò)程:第一步:建立Turtle對(duì)象并初始化。表盤繪制Turtle對(duì)象文本輸出Turtle對(duì)象3個(gè)指針Turtle對(duì)象第二步:靜態(tài)表盤繪制第三步:根據(jù)時(shí)鐘更新表針位置和時(shí)間信息說(shuō)明:需要導(dǎo)入turtle庫(kù)和datetime庫(kù)2023/1/282
模擬時(shí)鐘程序過(guò)程:第一步:建立Turtle對(duì)象并初始化。
表盤繪制函數(shù)SetupClock(radius):2023/1/283
表盤繪制函數(shù)SetupClock(radius):20
跨越函數(shù)Skip(step):2023/1/284
跨越函數(shù)Skip(step):2022/12/1284
定義表針函數(shù)mkHand():注冊(cè)Turtle形狀命令:register_shap(name,shape=None)name:shape的名字,可以是一個(gè)gif圖像shape:turtle形狀,可以為空2023/1/285
定義表針函數(shù)mkHand():注冊(cè)Turtle形狀命令
初始化函數(shù)Init():2023/1/286
初始化函數(shù)Init():2022/12/1286
更新時(shí)鐘函數(shù)Tick():2023/1/287
更新時(shí)鐘函數(shù)Tick():2022/12/1287
主函數(shù)main():
2023/1/288
主函數(shù)main():2022/12/1288源程序:2023/1/289源程序:2022/12/12892023/1/2902022/12/12902023/1/2912022/12/12912023/1/2922022/12/1292例10-22:編寫(xiě)程序。根據(jù)文件data.txt中的數(shù)據(jù),使用turtle庫(kù)來(lái)動(dòng)態(tài)繪制圖形路徑數(shù)據(jù)說(shuō)明:第1列:路徑前進(jìn)像素?cái)?shù)第2列:轉(zhuǎn)動(dòng)方向。0為左,1為右第3列:轉(zhuǎn)動(dòng)的角度第4—6列:繪制顏色的rgb值2023/1/293例10-22:編寫(xiě)程序。根據(jù)文件data.txt中的數(shù)據(jù),使程序執(zhí)行結(jié)果:2023/1/294程序執(zhí)行結(jié)果:2022/12/1294
程序?qū)崿F(xiàn)的具體過(guò)程為:(1)使用import命令為程序引入turtle庫(kù)(2)設(shè)置窗口信息和Turtle畫(huà)筆2023/1/295
程序?qū)崿F(xiàn)的具體過(guò)程為:(1)使用import命令為程序引(3)讀取數(shù)據(jù)文件到列表result中2023/1/296(3)讀取數(shù)據(jù)文件到列表result中2022/12/129
(4)根據(jù)每一條數(shù)據(jù)記錄進(jìn)行繪制(5)畫(huà)筆回到原點(diǎn)2023/1/297
2022/12/1297完整程序:2023/1/298完整程序:2022/12/12982023/1/2992022/12/1299
例10-23:《雪景-Snowfall》繪制2023/1/2100
例10-23:《雪景-Snowfall》繪制2022/1隨機(jī)因素:雪花位置雪花顏色雪花大小花瓣數(shù)目地面灰色線條長(zhǎng)短地面灰色線條位置因此,需要導(dǎo)入隨機(jī)數(shù)模塊2023/1/2101隨機(jī)因素:雪花位置2022/12/12101主函數(shù):2023/1/2102主函數(shù):2022/12/12102snow()函數(shù):2023/1/2103snow()函數(shù):2022/12/12103
ground()函數(shù):2023/1/2104
ground()函數(shù):2022/12/12104源程序:2023/1/2105源程序:2022/12/121052023/1/21062022/12/12106課堂練習(xí)二:課堂練習(xí)二2023/1/2107課堂練習(xí)二:課堂練習(xí)二2022/12/121072023/1/2108Python語(yǔ)言編程導(dǎo)論第十章Python的GUI編程張晉連2016.112022/12/121Python語(yǔ)言編程導(dǎo)論第十章Py內(nèi)容提要概述GUI程序開(kāi)發(fā)簡(jiǎn)介Tkinter與主要組件Turtle庫(kù)簡(jiǎn)介2023/1/2109內(nèi)容提要概述2022/12/122一、概述使用圖形用戶界面(GUI),可以使程序更友好。Python作為一種“膠水性”語(yǔ)言,提供了眾多GUI開(kāi)發(fā)庫(kù)的綁定,適合快速開(kāi)發(fā)GUI。目前大部分開(kāi)發(fā)庫(kù)還不支持Python3,且?guī)斓母滤俣炔皇呛芸?。如果使用的是Python3,可選擇的開(kāi)發(fā)庫(kù)就不是很多了。目前常用的開(kāi)發(fā)庫(kù)有:Python內(nèi)置的Tkinter、Graphics、Turtle等,以及非常強(qiáng)大的PyQT等。如果使用的是Python2,還有如wxPython、PyGTK、PMW等開(kāi)發(fā)庫(kù)可以選擇。2023/1/2110一、概述使用圖形用戶界面(GUI),可以使程序更友好。202本章簡(jiǎn)要介紹以下圖形庫(kù):Tkinter—Python標(biāo)準(zhǔn)GUITurtle—python內(nèi)置的圖形庫(kù)。2023/1/2111本章簡(jiǎn)要介紹以下圖形庫(kù):Tkinter—Python標(biāo)準(zhǔn)G二、GUI程序開(kāi)發(fā)簡(jiǎn)介日常使用的大量客戶端程序都屬于GUI程序,即在一個(gè)界面上有很多功能塊,包括:標(biāo)簽、按鈕、輸入框、菜單等。開(kāi)發(fā)GUI程序,首先需要有一塊空白畫(huà)面,然后在其上劃分出不同的區(qū)域,放上不同的模塊,最后完成每一個(gè)模塊的功能。2023/1/2112二、GUI程序開(kāi)發(fā)簡(jiǎn)介日常使用的大量客戶端程序都屬于GUI程GUI程序開(kāi)發(fā)基本步驟和過(guò)程:首先要有底層的根窗口對(duì)象,在其基礎(chǔ)上創(chuàng)建一個(gè)個(gè)小窗口對(duì)象。每一個(gè)窗口都是一個(gè)容器,可將所需的組件置于其中。每種GUI開(kāi)發(fā)庫(kù)都擁有大量的組件,一個(gè)GUI程序就是由各種不同功能的組件組成的,而根窗口對(duì)象則包含了所有組件。組件本身也可以作為一個(gè)容器,它可以包含其他組件,如下拉框。這種包含其他組件的稱為父組件,反之,包含在其他組件中的組件稱為子組件。這是一種相對(duì)的概念,對(duì)于有著多層包含的情況,某組件的父組件一般指的是直接包含它的組件。2023/1/2113GUI程序開(kāi)發(fā)基本步驟和過(guò)程:首先要有底層的根窗口對(duì)象,在其2023/1/2114構(gòu)建出了GUI程序的每一個(gè)組件,只完成了程序的界面,但此時(shí)只能看不能用,需要給每一個(gè)組件添加對(duì)應(yīng)的功能。使用GUI程序時(shí),會(huì)進(jìn)行各種操作,如鼠標(biāo)移動(dòng),按下或松開(kāi)鼠標(biāo)鍵,按下鍵盤按鍵等,這些操作稱為事件。每個(gè)組件對(duì)應(yīng)著一些行為,如在文本框中輸入文本,單擊按鈕等,這些也稱為事件。GUI程序啟動(dòng)的時(shí)候就一直監(jiān)控這些事件,當(dāng)某個(gè)事件發(fā)生的時(shí)候,就進(jìn)行對(duì)應(yīng)的處理并返回相應(yīng)的結(jié)果。因此,GUI程序是由這一整套事件驅(qū)動(dòng)的,這個(gè)過(guò)程稱為事件驅(qū)動(dòng)處理。2022/12/127構(gòu)建出了GUI程序的每一個(gè)組件,只完成2023/1/2115一個(gè)事件發(fā)生后,GUI程序捕獲該事件、作出對(duì)應(yīng)的處理并返回結(jié)果的過(guò)程稱為回調(diào)。如計(jì)算器程序,單擊了“=”按鈕之后,便產(chǎn)生了一個(gè)事件,需要計(jì)算最終的結(jié)果,程序便開(kāi)始對(duì)算式進(jìn)行計(jì)算,返回最終結(jié)果并顯示出來(lái)。這個(gè)計(jì)算并顯示結(jié)果的過(guò)程即為回調(diào)。當(dāng)為程序需要的每一個(gè)事件都添加完相應(yīng)的回調(diào)處理之后,整個(gè)GUI就完成了。2022/12/128一個(gè)事件發(fā)生后,GUI程序捕獲該事件、三、Tkinter與主要組件Tk是Python默認(rèn)的工具集(即圖形庫(kù)),Tkinter是Tk的Python接口,通過(guò)Tkinter可以方便地調(diào)用Tk進(jìn)行圖形界面開(kāi)發(fā)。Tk與其他開(kāi)發(fā)庫(kù)相比,不是最強(qiáng)大的,模塊工具也不是非常的豐富。但它非常簡(jiǎn)單,所提供的功能開(kāi)發(fā)一般的應(yīng)用也完全夠用了,且能在大部分平臺(tái)上運(yùn)行。Python自帶的IDEL也是用Tkinter開(kāi)發(fā)的。Tkinter的不足之處是缺少合適的可視化界面設(shè)計(jì)工具,需要通過(guò)代碼來(lái)完成窗口設(shè)計(jì)和元素布局。2023/1/2116三、Tkinter與主要組件Tk是Python默認(rèn)的工具集(2023/1/2117Tkinter中提供了較為豐富的控件,完全能滿足基本的GUI程序的需求。由于Tkinter模塊已經(jīng)在Python中內(nèi)置,所以在使用之前,只需將其導(dǎo)入即可。兩種導(dǎo)入方式為:importtkinterastk—導(dǎo)入tkinter,但沒(méi)引入任何組件,在使用時(shí)需要使用tk前綴,如需要引入按鈕,則表示為:tk.Button。fromtkinterimport*—將tkinter中的所有組件一次性引入。2022/12/1210Tkinter中提供了較為豐富的控件1、在程序中使用Tkinter利用Tkinter模塊來(lái)引用Tk構(gòu)建和運(yùn)行GUI程序,通常需要5步:導(dǎo)入Tkinter模塊;創(chuàng)建一個(gè)頂層窗口;在頂層窗口的基礎(chǔ)上構(gòu)建所需要的GUI模塊和功能;將每一個(gè)模塊與底層程序代碼關(guān)聯(lián)起來(lái);執(zhí)行主循環(huán)。2023/1/21181、在程序中使用Tkinter利用Tkinter模塊來(lái)引用TTkinter主要組件簡(jiǎn)介組件功能Button按鈕。類似標(biāo)簽,但提供額外功能,如鼠標(biāo)按下、釋放及鍵盤操作事件Canvas畫(huà)布。提供繪圖功能(直線、橢圓、多邊形、矩形),可以包含圖形或位圖Checkbutton選擇按鈕。一組方框,可以選擇其中的任意個(gè)Radiobutton單選按鈕。一組方框,其中只有一個(gè)可被選擇Entry文本框。單行文字域,用來(lái)收集鍵盤輸入Frame框架。包含其他組件的純?nèi)萜鱈abel標(biāo)簽。用來(lái)顯示文字或圖片Listbox列表框。一個(gè)選項(xiàng)列表,用戶可以從中選擇Menu菜單。單擊后彈出一個(gè)選項(xiàng)列表,用戶可以從中選擇Menubutton菜單按鈕。用來(lái)包含菜單的組件(有下拉式、層疊式)Message消息框。類似于標(biāo)簽,但可以顯示多行文本Scale進(jìn)度條。線性“滑塊”組件,可設(shè)定起始值和結(jié)束值,顯示當(dāng)前位置的精確值Scrollbar滾動(dòng)條。對(duì)其支持的組件(文本域、畫(huà)布、列表框、文本框)提供滾動(dòng)功能Text文本域。多行文字區(qū)域,可用來(lái)收集(或顯示)用戶輸入的文字Toplevel頂級(jí)。類似框架,但提供一個(gè)獨(dú)立的窗口容器。119Tkinter主要組件簡(jiǎn)介組件功能Button按鈕。類似標(biāo)簽組件的共同屬性:dimensions:尺寸colors:顏色fonts:字體anchors:錨reliefstyles:浮雕式bitmaps:顯示位圖cursors:光標(biāo)的外形說(shuō)明:每種組件還有其各自特有的屬性2023/1/2120組件的共同屬性:dimensions:尺寸2022/12注意:Tk使用了一種包管理器來(lái)管理所有的組件,當(dāng)定義完組件之后,需要調(diào)用pack()方法來(lái)控制組件的顯示方式,若不調(diào)用pack()方法,組件將不會(huì)顯示。在交互環(huán)境下,編寫(xiě)Tkinter測(cè)試代碼時(shí),運(yùn)行過(guò)Tk()(創(chuàng)建頂層窗口的函數(shù))之后即進(jìn)入主循環(huán),可以看到頂層窗口。而若是運(yùn)行py文件,一定要調(diào)用mainloop()方法進(jìn)入主循環(huán),方可看到頂層窗口。2023/1/2121注意:Tk使用了一種包管理器來(lái)管理所有的組件,當(dāng)定義完組件之
創(chuàng)建GUI應(yīng)用程序窗口代碼模板:2023/1/2122
創(chuàng)建GUI應(yīng)用程序窗口代碼模板:2022/12/12152、頂層窗口頂層窗口也稱為根窗口。頂層窗口實(shí)際上是一個(gè)普通窗口,包括一個(gè)標(biāo)題欄和窗口管理器所提供的窗口裝飾部分,如最大化按鈕等。在一個(gè)Tkinter開(kāi)發(fā)的應(yīng)用程序中,只需要?jiǎng)?chuàng)建一個(gè)頂層窗口即可,且此窗口的創(chuàng)建必須是在其他窗口創(chuàng)建之前。2023/1/21232、頂層窗口頂層窗口也稱為根窗口。2022/12/1216例10-1:創(chuàng)建頂層窗口2023/1/2124執(zhí)行結(jié)果:例10-1:創(chuàng)建頂層窗口2022/12/1217執(zhí)行結(jié)果:3、標(biāo)簽標(biāo)簽組件可以用來(lái)顯示圖片和文本,通過(guò)在文本中添加換行符來(lái)控制換行,也可以通過(guò)控制組件的大小實(shí)現(xiàn)自動(dòng)換行。例10-2:使用標(biāo)簽(Label)編寫(xiě)一個(gè)程序,在程序主體中顯示“HelloWorld!”。2023/1/21253、標(biāo)簽標(biāo)簽組件可以用來(lái)顯示圖片和文本,通過(guò)在文本中添加換行程序及執(zhí)行結(jié)果:2023/1/2126程序及執(zhí)行結(jié)果:2022/12/1219Label組件常用參數(shù)參數(shù)描述height組件的高度(所占行數(shù))width組件的寬度(所占字符個(gè)數(shù))fg前景字體顏色bg背景顏色justify多行文本的對(duì)齊方式,可選參數(shù)為:LEFT、CENTER、RIGHTpadx文本左右兩側(cè)的空格數(shù)(默認(rèn)為1)pady文本上下兩側(cè)的空格數(shù)(默認(rèn)為1)2023/1/2127Label組件常用參數(shù)參數(shù)描述height組件的高度(所占行增加了參數(shù)后的程序及執(zhí)行結(jié)果:2023/1/2128增加了參數(shù)后的程序及執(zhí)行結(jié)果:2022/12/12214、框架框架(Frame)相對(duì)于其他組件而言,它只是個(gè)容器,因?yàn)樗鼪](méi)有方法,但它可以捕獲鍵盤和鼠標(biāo)的事件來(lái)進(jìn)行回調(diào)??蚣芤话阌米靼唤M控件的主體,且可以定制外觀。2023/1/21294、框架框架(Frame)相對(duì)于其他組件而言,它只是個(gè)容器,例10-3:創(chuàng)建不同樣式的框架2023/1/2130例10-3:創(chuàng)建不同樣式的框架2022/12/12235、按鈕按鈕組件(Button)是tkinter最常用的圖形組件之一,通過(guò)Button可以方便地與用戶進(jìn)行交互。嚴(yán)格地說(shuō),按鈕(Button)也可被看作標(biāo)簽,只是它可以捕獲鍵盤和鼠標(biāo)事件。按鈕可以禁用,禁用之后的按鈕不能進(jìn)行單擊等任何操作。如果將按鈕放進(jìn)TAB群中,就可以使用TAB鍵來(lái)進(jìn)行跳轉(zhuǎn)和定位。2023/1/21315、按鈕按鈕組件(Button)是tkinter最常用的圖形例10-4:創(chuàng)建按鈕示例2023/1/2132例10-4:創(chuàng)建按鈕示例2022/12/1225Button組件常用參數(shù)參數(shù)描述height組件的高度(所占行數(shù))width組件的寬度(所占字符個(gè)數(shù))fg前景字體顏色bg背景顏色activebackground按鈕按下時(shí)的背景顏色activeforeground按鈕按下時(shí)的前景顏色justify多行文本的對(duì)齊方式,可選參數(shù)為:LEFT、CENTER、RIGHTpadx文本左右兩側(cè)的空格數(shù)(默認(rèn)為1)pady文本上下兩側(cè)的空格數(shù)(默認(rèn)為1)state設(shè)置組件狀態(tài),默認(rèn)為NORMAL,可設(shè)置為:DISABLED—禁用組件(必須大寫(xiě))2023/1/2133Button組件常用參數(shù)參數(shù)描述height組件的高度(所占增加了參數(shù)后的程序和執(zhí)行結(jié)果:2023/1/2134按下“退出”按鈕:增加了參數(shù)后的程序和執(zhí)行結(jié)果:2022/12/1227按下“6、輸入框一個(gè)GUI程序,接收用戶的輸入幾乎是必不可少的。輸入框(Entry)組件就是用來(lái)接收用戶輸入的最基本的組件??梢詾檩斎肟蛟O(shè)置默認(rèn)值,也可以禁止用戶輸入。如果禁止輸入,用戶就不能改變輸入框中的值了。當(dāng)用戶輸入的內(nèi)容一行顯示不下的時(shí)候,輸入框會(huì)自動(dòng)生成滾動(dòng)條。2023/1/21356、輸入框一個(gè)GUI程序,接收用戶的輸入幾乎是必不可少的。輸例10-5:創(chuàng)建輸入框示例2023/1/2136例10-5:創(chuàng)建輸入框示例2022/12/1229Entry參數(shù)組件常用參數(shù)參數(shù)描述height組件的高度(所占行數(shù))width組件的寬度(所占字符個(gè)數(shù))fg前景字體顏色bg背景顏色show將Entry框中的文本替換為指定字符,用于輸入密碼等,如設(shè)置show="*"state設(shè)置組件狀態(tài),默認(rèn)為NORMAL,可設(shè)置為:DISABLED—禁用組件,READONLY—只讀2023/1/2137Entry參數(shù)組件常用參數(shù)參數(shù)描述height組件的高度(所例10-6:將攝氏度轉(zhuǎn)換為華氏度2023/1/2138例10-6:將攝氏度轉(zhuǎn)換為華氏度2022/12/1231程序執(zhí)行:2023/1/2139程序執(zhí)行:2022/12/12327、單選按鈕單選按鈕(Radiobutton)是一組排他性的選擇框,只能從該組中選擇一個(gè)選項(xiàng),當(dāng)選擇了其中一項(xiàng)之后便會(huì)取消其他選項(xiàng)的選擇。要想使用單選按鈕,必須將這一組單選按鈕與一個(gè)相同的變量關(guān)聯(lián)起來(lái),由用戶為這個(gè)變量選擇不同的值。2023/1/21407、單選按鈕單選按鈕(Radiobutton)是一組排他性的例10-7:創(chuàng)建單選按鈕示例2023/1/2141例10-7:創(chuàng)建單選按鈕示例2022/12/1234Radiobutton組件常用參數(shù)參數(shù)描述variable單選按鈕索引變量,通過(guò)變量的值確定哪個(gè)單選按鈕被選中。一組單選按鈕使用同一個(gè)索引變量value單選按鈕選中時(shí)變量的值command單選按鈕選中時(shí)執(zhí)行的命令(函數(shù))2023/1/2142Radiobutton組件常用參數(shù)參數(shù)描述variable單8、復(fù)選按鈕與單選按鈕相對(duì)的是復(fù)選按鈕(Checkbutton)。復(fù)選按鈕之間沒(méi)有互斥作用,可以一次選擇多個(gè)。同樣地,每一個(gè)按鈕都需要與一個(gè)變量相關(guān)聯(lián),且每一個(gè)復(fù)選按鈕關(guān)聯(lián)的變量都是不同的。若像單選按鈕一樣,關(guān)聯(lián)的是同一個(gè)按鈕,則當(dāng)選中其中一個(gè)的時(shí)候,會(huì)將所有按鈕都選上??梢越o每一個(gè)復(fù)選按鈕綁定一個(gè)回調(diào),當(dāng)該選項(xiàng)被選中時(shí),執(zhí)行該回調(diào)。2023/1/21438、復(fù)選按鈕與單選按鈕相對(duì)的是復(fù)選按鈕(Checkbutto例10-8:基本復(fù)選按鈕示例2023/1/2144例10-8:基本復(fù)選按鈕示例2022/12/1237例10-9:創(chuàng)建帶“禁用”狀態(tài)的復(fù)選按鈕2023/1/2145例10-9:創(chuàng)建帶“禁用”狀態(tài)的復(fù)選按鈕2022/12/12Checkbutton組件常用參數(shù)參數(shù)描述variable復(fù)選按鈕索引變量,通過(guò)變量的值確定哪些復(fù)選按鈕被選中。每個(gè)復(fù)選按鈕使用不同的變量,使復(fù)選按鈕之間相互獨(dú)立onvalue復(fù)選按鈕選中(有效)時(shí)變量的值offvalue復(fù)選按鈕未選中(無(wú)效)時(shí)變量的值command復(fù)選按鈕選中時(shí)執(zhí)行的命令(函數(shù))2023/1/2146Checkbutton組件常用參數(shù)參數(shù)描述variable復(fù)例10-10:?jiǎn)芜x按鈕及復(fù)選按鈕綜合應(yīng)用2023/1/2147例10-10:?jiǎn)芜x按鈕及復(fù)選按鈕綜合應(yīng)用2022/12/12程序:2023/1/2148程序:2022/12/12412023/1/21492022/12/1242說(shuō)明:程序中,文字的顏色通過(guò)Radiobutton來(lái)選擇,同一時(shí)間只能選擇一個(gè)顏色。在三個(gè)Red、Blue和Green三個(gè)單選框中,定義了同樣的變量參數(shù)color,選擇不同的單選按鈕會(huì)為該變量賦予不同的字符串值,內(nèi)容即為對(duì)應(yīng)的顏色。任何單選按鈕被選中都會(huì)觸發(fā)colorChecked()函數(shù),將標(biāo)簽修改為對(duì)應(yīng)單選框表示的顏色。2023/1/2150說(shuō)明:程序中,文字的顏色通過(guò)Radiobutton來(lái)選擇,同9、消息很多時(shí)候需要給用戶發(fā)送消息,一般內(nèi)容較多,如幫助信息等。消息(Message)控件提供了顯示多行文本的方法,且可以設(shè)置字體和背景色。Message組件提供了一個(gè)標(biāo)準(zhǔn)的方法,可以非常方便地實(shí)現(xiàn)這項(xiàng)功能。2023/1/21519、消息很多時(shí)候需要給用戶發(fā)送消息,一般內(nèi)容較多,如幫助信息例10-11:創(chuàng)建消息示例2023/1/2152例10-11:創(chuàng)建消息示例2022/12/124510、滾動(dòng)條滾動(dòng)條(Scrollbar)組件可以添加至任何一個(gè)組件,一些組件在界面顯示不下時(shí)會(huì)自動(dòng)添加滾動(dòng)條,但可以使用滾動(dòng)條組件來(lái)對(duì)其進(jìn)行控制。2023/1/215310、滾動(dòng)條滾動(dòng)條(Scrollbar)組件可以添加至任何一例10-12:滾動(dòng)條示例2023/1/2154例10-12:滾動(dòng)條示例2022/12/124711、列表框列表框(ListBox)組件是一個(gè)選項(xiàng)列表,用戶可以從中選擇某一個(gè)選項(xiàng)。例10-12中滾動(dòng)條組件中使用了列表框。2023/1/215511、列表框列表框(ListBox)組件是一個(gè)選項(xiàng)列表,用戶例10-13:創(chuàng)建列表框示例2023/1/2156例10-13:創(chuàng)建列表框示例2022/12/124912、消息框消息窗口(messagebox)用于彈出提示框向用戶進(jìn)行告警,或讓用戶選擇下一步如何操作。消息框包括很多類型,常用的有info、warning、error、yesno、okcancel等,包含不同的圖標(biāo)、按鈕以及彈出提示音。2023/1/215712、消息框消息窗口(messagebox)用于彈出提示框向例10-14:各種消息框應(yīng)用2023/1/2158例10-14:各種消息框應(yīng)用2022/12/1251源程序:2023/1/2159源程序:2022/12/12522023/1/21602022/12/125313、繪圖組件繪圖組件(Canvas—畫(huà)布)可以在GUI中實(shí)現(xiàn)2D圖形的繪制,相當(dāng)于畫(huà)圖板。組件內(nèi)置了多種繪圖函數(shù),可以通過(guò)簡(jiǎn)單的2D坐標(biāo)繪制直線、矩形、圓形、多邊形等。2023/1/216113、繪圖組件繪圖組件(Canvas—畫(huà)布)可以在GUI中實(shí)例10-15:繪圖應(yīng)用2023/1/2162例10-15:繪圖應(yīng)用2022/12/1255程序執(zhí)行:2023/1/2163程序執(zhí)行:2022/12/1256說(shuō)明:直線(line),即線段,通過(guò)兩個(gè)端點(diǎn)定義。坐標(biāo)順序?yàn)閤1、y1、x2、y2。矩形(rectangle)通過(guò)對(duì)角線上的兩個(gè)點(diǎn)來(lái)定義。需要注意的是Canvas中沒(méi)有畫(huà)圓函數(shù),這里通過(guò)繪制橢圓間接實(shí)現(xiàn)了繪制圓形的函數(shù)drawCircle()。橢圓(oval)是通過(guò)外切矩形的對(duì)角線兩點(diǎn)來(lái)定義的。2023/1/2164說(shuō)明:直線(line),即線段,通過(guò)兩個(gè)端點(diǎn)定義。坐標(biāo)順序?yàn)槔?0-16:畫(huà)布顯示文字、圖片和圖形2023/1/2165例10-16:畫(huà)布顯示文字、圖片和圖形2022/12/125例10-17:控制圖形移動(dòng)2023/1/2166例10-17:控制圖形移動(dòng)2022/12/1259用鍵盤的上、下、左、右鍵可移動(dòng)紅色方塊2023/1/2167用鍵盤的上、下、左、右鍵可移動(dòng)紅色方塊2022/12/126例10-18:編程實(shí)現(xiàn)簡(jiǎn)易聊天窗口GUI聊天窗口布局:左上:聊天歷史信息顯示左中:當(dāng)前信息編輯區(qū)域左下:按鈕區(qū)域右側(cè):信息顯示區(qū)域2023/1/2168例10-18:編程實(shí)現(xiàn)簡(jiǎn)易聊天窗口GUI聊天窗口布局:202
Frame控件:容器區(qū)域布局:frmLT、frmLC、frmLB、frmRT2023/1/2169
Frame控件:容器區(qū)域布局:2022/12/1262
統(tǒng)一控件對(duì)象命名規(guī)則:“控件類型”+“功能”frmLT,frame+LeftToptxtMsg,text控件+消息btnSend,button控件+發(fā)送2023/1/2170
統(tǒng)一控件對(duì)象命名規(guī)則:“控件類型”+“功能”2022/窗口控件:2023/1/2171txtMsgLIsttxtMsglblImagebtnSend
btnCancel
窗口控件:2022/12/1264txtMsgLIsttx創(chuàng)建各窗口控件:2023/1/2172創(chuàng)建各窗口控件:2022/12/1265
sendMsg()回調(diào)函數(shù)功能:在消息框列表輸出歷史消息,同時(shí)將當(dāng)前時(shí)間、當(dāng)前信息作為最后一條歷史消息。然后刪除消息發(fā)送框的內(nèi)容。2023/1/2173
sendMsg()回調(diào)函數(shù)2022/12/12662023/1/2174sendMsgEvent():cancelMsg():2022/12/1267sendMsgEvent():
grid()方法:界面上控件的布局2023/1/2175
grid()方法:界面上控件的布局2022/12/126
grid()方法:界面上控件的布局2023/1/2176
grid()方法:界面上控件的布局2022/12/126源程序:2023/1/2177源程序:2022/12/12702023/1/21782022/12/1271課堂練習(xí)一:課堂練習(xí)一2023/1/2179課堂練習(xí)一:課堂練習(xí)一2022/12/1272四、Turtle庫(kù)簡(jiǎn)介Turtle庫(kù)是Python語(yǔ)言中一個(gè)很流行的繪制圖像的函數(shù)庫(kù)。使用turtle庫(kù),可想象為一個(gè)小烏龜,在一個(gè)橫軸為x、縱軸為y的坐標(biāo)系原點(diǎn),(0,0—中心)位置開(kāi)始,方向向右。它根據(jù)一組函數(shù)指令的控制,在這個(gè)平面坐標(biāo)系中移動(dòng),從而在它爬行的路徑上繪制了圖形。詳細(xì)信息見(jiàn):/3/library/turtle.html2023/1/2180四、Turtle庫(kù)簡(jiǎn)介Turtle庫(kù)是Python語(yǔ)言中一個(gè)
1、控制畫(huà)筆繪制狀態(tài)方法方法名稱方法含義pendown() 放下畫(huà)筆,移到指定點(diǎn)后繼續(xù)繪制penup() 提起畫(huà)筆,用于另起一個(gè)地方繪制時(shí)用,與pendown()配對(duì)使用 pensize(width) 設(shè)置畫(huà)筆線條的粗細(xì)為指定大小 2023/1/2181
1、控制畫(huà)筆繪制狀態(tài)方法方法名稱方法含義pendown(2、turtle運(yùn)動(dòng)方法方法名稱方法含義forward() 沿著當(dāng)前方向前進(jìn)指定距離 backward() 沿著當(dāng)前相反方向后退指定距離 right(angle) 向右旋轉(zhuǎn)angle角度 left(angle) 向左旋轉(zhuǎn)angle角度goto(x,y) 移動(dòng)到絕對(duì)坐標(biāo)(x,y)處 setx() 將當(dāng)前x軸移動(dòng)到指定位置 sety() 將當(dāng)前y軸移動(dòng)到指定位置 setheading(angle)設(shè)置當(dāng)前朝向?yàn)閍ngle角度(0表示向東,90表示向北,180表示向西,270表示向南) home() 設(shè)置當(dāng)前畫(huà)筆位置為原點(diǎn),朝向東。 circle() 繪制一個(gè)指定半徑,角度、以及步驟的圓圈 dot(r,color) 繪制一個(gè)指定直徑和顏色的圓點(diǎn) undo() 撤銷畫(huà)筆最后一步動(dòng)作 speed() 設(shè)置畫(huà)筆的繪制速度,參數(shù)為0-10之間 2023/1/21822、turtle運(yùn)動(dòng)方法方法名稱方法含義forward()例10-19:應(yīng)用circle方法繪制圖形2023/1/2183例10-1
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 財(cái)務(wù)課題申報(bào)書(shū)范文
- 課題申報(bào)書(shū)高校
- 申報(bào)課題的項(xiàng)目書(shū)
- 人文社科研究課題申報(bào)書(shū)
- 畜牧養(yǎng)殖課題申報(bào)書(shū)
- 課題申報(bào)書(shū)項(xiàng)目?jī)?nèi)容
- 課題申報(bào)書(shū)人員分工
- 婦科課題立項(xiàng)申報(bào)書(shū)
- 橫向科研課題申報(bào)書(shū)
- 單縣新房購(gòu)房合同范例
- GB/T 44143-2024科技人才評(píng)價(jià)規(guī)范
- 羽毛球比賽對(duì)陣表模板
- 三級(jí)安全培訓(xùn)考試題附答案【滿分必刷】
- 四年級(jí)下冊(cè)語(yǔ)文第二單元 快樂(lè)讀書(shū)吧:十萬(wàn)個(gè)為什么 導(dǎo)讀課件
- GB/T 44057-2024回轉(zhuǎn)窯回收次氧化鋅裝備運(yùn)行效果評(píng)價(jià)技術(shù)要求
- 文創(chuàng)產(chǎn)品設(shè)計(jì)-課件
- 風(fēng)電場(chǎng)葉片無(wú)人機(jī)巡檢作業(yè)技術(shù)導(dǎo)則
- 工業(yè)廢鹽及副產(chǎn)鹽深度資源化利用項(xiàng)目可行性研究報(bào)告
- 制度機(jī)制風(fēng)險(xiǎn)點(diǎn)及防控措施3篇
- 管道鈍化方案
- “小小科學(xué)家”廣東省少年兒童科學(xué)教育體驗(yàn)活動(dòng)+生物試題4
評(píng)論
0/150
提交評(píng)論