




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、圖形用戶界面,事件驅(qū)動(dòng)編程,2,2,GUI編程,首先:設(shè)計(jì)界面外觀 用什么構(gòu)件,怎么布局 其次:實(shí)現(xiàn)界面元素所對(duì)應(yīng)的程序功能 事件驅(qū)動(dòng):功能代碼的執(zhí)行與構(gòu)件關(guān)聯(lián),由針對(duì)構(gòu)件的事件決定執(zhí)行什么代碼以及何時(shí)執(zhí)行.,3,3,Tkinter事件描述,事件描述 類型符:指定事件類型,如Button和Key 修飾符(可選):描述雙擊,組合鍵等 細(xì)節(jié)符(可選):指定具體鼠標(biāo)或鍵盤按鍵 例如 ,4,4,常用鼠標(biāo)事件,或或:單擊左鍵 類似有和 :按下左鍵并移動(dòng) 類似有和 :雙擊左鍵 和:鼠標(biāo)指針進(jìn)入/離開構(gòu)件區(qū)域,5,5,常用鍵盤事件,或a:按下字母a 可打印字符都類似,但空格是,小于號(hào)是 注意:1和不同! :
2、按下回車鍵 非可打印字符都類似,如:, , , , , 等 :按下任意鍵 :同時(shí)按下Shift和鍵 類似的有Alt組合、Ctrl組合,6,6,事件對(duì)象,每個(gè)事件都創(chuàng)建一個(gè)事件對(duì)象(Event類的實(shí)例),并將該對(duì)象傳遞給事件處理函數(shù) 事件對(duì)象具有若干描述事件的屬性: x和y:鼠標(biāo)點(diǎn)擊位置(相對(duì)于構(gòu)件左上角) x_root和y_root:鼠標(biāo)點(diǎn)擊位置(相對(duì)于屏幕左上角) num:點(diǎn)擊的鼠標(biāo)鍵號(hào)(1、2、3) char:按下的字符(ASCII);如果按下特殊鍵則為空串 keysym:按下的字符(ASCII);如果按下特殊鍵則為該鍵的名稱(是個(gè)字符串),7,7,7,事件處理,GUI應(yīng)用程序在建立圖形界
3、面等初始化工作后進(jìn)入事件循環(huán),等待事件發(fā)生并觸發(fā)綁定的事件處理程序 mainloop()方法:進(jìn)入事件循環(huán) 綁定:建立事件與事件處理程序間的對(duì)應(yīng),8,8,8,構(gòu)件綁定事件,語(yǔ)法: .bind(,) 語(yǔ)義:若針對(duì)發(fā)生了與相匹配的事件,則調(diào)用 調(diào)用事件處理程序時(shí),系統(tǒng)傳遞Event對(duì)象作為實(shí)參. 一般是由用戶自定義的函數(shù). 這種函數(shù)在應(yīng)用程序中定義但不由應(yīng)用程序調(diào)用,而是由系統(tǒng)調(diào)用,一般稱為回調(diào)(callback)函數(shù) GUI應(yīng)用程序可封裝為類,這時(shí)事件處理程序常定義為應(yīng)用程序類的方法. (詳后),9,9,9,例:框架綁定鼠標(biāo)事件,eg8_6.py from Tkinter import * de
4、f callback(event): print clicked at,event.x,event.y root = Tk() f = Frame(root,width=100,height=100) f.bind(,callback) f.pack() root.mainloop(),10,10,10,例:按鈕綁定鍵盤事件,按鍵時(shí),界面中哪個(gè)構(gòu)件響應(yīng)該鍵盤事件? 占有界面焦點(diǎn)的構(gòu)件. 圖形界面中有唯一焦點(diǎn),任何時(shí)刻只能有一個(gè)構(gòu)件占有焦點(diǎn),鍵盤事件總是發(fā)送到當(dāng)前占有焦點(diǎn)的構(gòu)件 from Tkinter import * def printInfo(event): print pressed,
5、event.char root = Tk() b = Button(root,text = Press any key) b.bind(,printInfo) b.focus_set() b.pack() root.mainloop(),11,11,11,例:綁定多個(gè)事件,按鍵時(shí),界面中哪個(gè)構(gòu)件響應(yīng)該鍵盤事件? 占有界面焦點(diǎn)的構(gòu)件.例eg8_7.py: from Tkinter import * def callback1(event): print pressed, event.char def callback2(event): f.focus_set() print clicked at
6、, event.x, event.y root = Tk() f = Frame(root,width=100,height=100) f.bind(,callback1) f.bind(,callback2) f.pack() root.mainloop(),12,12,12,應(yīng)用程序作為對(duì)象,GUI編程經(jīng)常將整個(gè)應(yīng)用程序封裝成類. 在類中建立圖形界面,定義事件處理方法. 好處 事件處理函數(shù)是類的方法, 自然可以訪問(wèn)類中所有實(shí)例變量 只要將構(gòu)件存儲(chǔ)為實(shí)例變量,就能實(shí)現(xiàn)處理代碼與圖形界面的“無(wú)縫集成”.,例:程序類獨(dú)立創(chuàng)建根窗口,class MyApp: def _init_(self): r
7、oot = Tk() b = Button(root,.) . root.mainloop() def f(): . app = MyApp(),13,例:程序類依賴外部根窗口,class MyApp: def _init_(self,master): f = Frame(master,.) b = Button(f,.) . root = Tk() app = MyApp(root) root.mainloop(),14,例:myapp.py,class MyApp: def _init_(self): self.root = Tk() self.t = Label(self.root,te
8、xt=Spam) self.t.pack() Button(self.root,text=Play,command=self.changeText).pack() Button(self.root,text=Quit,command=self.root.quit).pack() self.root.mainloop() self.root.destroy() def changeText(self): if self.ttext = Spam: self.ttext = Egg else: self.ttext = Spam app = MyApp(),15,16,16,16,模型-視圖,復(fù)雜
9、程序??煞纸獬珊诵倪壿嫼陀脩艚缑鎯蓚€(gè)部分 模型:為應(yīng)用問(wèn)題建模,管理應(yīng)用問(wèn)題的數(shù)據(jù)和行為,對(duì)來(lái)自UI的數(shù)據(jù)請(qǐng)求或數(shù)據(jù)更新指令進(jìn)行響應(yīng) 視圖:負(fù)責(zé)顯示模型的當(dāng)前數(shù)據(jù)狀態(tài),響應(yīng)用戶的交互動(dòng)作 模型和視圖相互獨(dú)立,可以分開設(shè)計(jì)和測(cè)試,17,17,17,模型-視圖方法的優(yōu)點(diǎn),由于模型與視圖的相對(duì)獨(dú)立性,可以為一個(gè)模型配用不同的視圖,以達(dá)到不同的目的. 后例中,先設(shè)計(jì)一個(gè)基于文本界面的簡(jiǎn)單視圖來(lái)測(cè)試模型的正確性,然后再設(shè)計(jì)更美觀易用的GUI視圖,編程案例:匯率換算器,模型:存儲(chǔ)當(dāng)前匯率,進(jìn)行外幣與人民幣之間的換算 類CCApp: ccapp.py 復(fù)雜程序也許需要多個(gè)類來(lái)實(shí)現(xiàn)模型 注意_init_的參數(shù)inter:代表程序的界面(尚未設(shè)計(jì)),18,基于文本的用戶界面,先實(shí)現(xiàn)一個(gè)簡(jiǎn)單界面,以測(cè)試模型是否能正確工作. 類TextInterface: ti.py 測(cè)
溫馨提示
- 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āng)方案
- 疼痛健康宣教與管理要點(diǎn)
- 時(shí)間重合面試題及答案
- 思科銷售考試題及答案
- 書店收銀面試題及答案
- 農(nóng)田建設(shè)面試題及答案
- 丁類(D類)功率放大器
- 鋼制壓力容器焊接通用規(guī)程
- 2023年濰坊市青州市人民醫(yī)院醫(yī)護(hù)人員招聘筆試模擬試題及答案解析
- (0059)船舶貨運(yùn)保險(xiǎn)理賠答疑手冊(cè)
- 醫(yī)療器械輻照滅菌確認(rèn)報(bào)告
- 南瑞繼保103-主體部分
- MT/T570—1996煤礦電氣圖專用圖形符號(hào)
- 燃?xì)廨斉涔こ淘O(shè)計(jì)施工驗(yàn)收技術(shù)規(guī)范 DB11T 302-2005
- 自動(dòng)噴水滅火系統(tǒng)嚴(yán)密性試驗(yàn)記錄
- 河北省城市集中式飲用水水源保護(hù)區(qū)劃分
- 工程材料采購(gòu)方案(完整版)
評(píng)論
0/150
提交評(píng)論