版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
口令:RAPID708第13章
項(xiàng)目實(shí)戰(zhàn):桌面應(yīng)用開發(fā)項(xiàng)目分析設(shè)計(jì)思路:明確最終要實(shí)現(xiàn)的功能。分析功能,設(shè)計(jì)總體框架。完善豐富不同模塊的功能,實(shí)現(xiàn)效果。本項(xiàng)目運(yùn)行后在桌面生成若干個(gè)數(shù)的彩色彈球,在電腦屏幕上隨機(jī)彈動(dòng),可以作為屏幕保護(hù)、電腦壁紙使用,編寫本項(xiàng)目時(shí)首先需要設(shè)計(jì)總體的框架,比如屏幕的長(zhǎng)寬、界面的布局、彈球的個(gè)數(shù)、彈動(dòng)效果等,然后按照模塊逐步實(shí)現(xiàn)代碼,最終實(shí)現(xiàn)效果??蚣茉O(shè)計(jì)第一步:導(dǎo)入所需要的模塊,此時(shí)用到“Tkinter”模塊和“Random”模塊。fromrandomimportrandintfromtkinterimport*fromtkinter.ttkimport*框架設(shè)計(jì)第二步:設(shè)計(jì)程序的總體框架,使用面向?qū)ο蟮某绦蛟O(shè)計(jì)思想。創(chuàng)建一個(gè)設(shè)計(jì)框架的類,獲取屏幕的分辨率設(shè)置彈球范圍、彈球個(gè)數(shù)、設(shè)置界面布局和彈球啟動(dòng)等功能。classMoreBalls:#定義一個(gè)列表,用來存儲(chǔ)所有的球?qū)ο骲alls=[]#num是球的數(shù)量def__init__(self,num): #創(chuàng)建一個(gè)Tk()窗口實(shí)例self.root=Tk()#w和h分別獲取了屏幕分辨率的寬度和高度scrnw,scrnh=self.root.winfo_screenwidth(),self.root.winfo_screenheight()self.root.title("桌面應(yīng)用")#去除窗口邊框和任務(wù)欄顯示self.root.overrideredirect(1)#設(shè)置窗口的透明度,0-1之間,1是不透明,0是全透明。self.root.attributes("-alpha",1)#綁定退出事件鼠標(biāo)任意點(diǎn)擊退出
self.root.bind("<Any-Button>",self.myquit)#Canvas提供繪圖功能(直線、橢圓、多邊形等),
寬度和高度是屏幕分辨率大小self.canvas=Canvas(self.root,width=scrnw,height=scrnh)#讓畫布按pack()布局self.canvas.pack()#獲取球的數(shù)量生成迭代器,每次迭代創(chuàng)建一個(gè)球foriinrange(num): #ball是SettingBalls()類對(duì)象,傳入self.canvas畫布,以及屏幕的寬高ball=SettingBalls(self.canvas,scrnwidth=scrnw,scrnheight=scrnh)#調(diào)用創(chuàng)建球的方法ball.create_ball()#將生成的球?qū)ο蠓诺絙alls列表里self.balls.append(ball)#調(diào)用run_ball()方法,啟動(dòng)小球運(yùn)動(dòng)self.run_ball()#調(diào)用mainloop()消息循環(huán)機(jī)制self.root.mainloop()defrun_ball(self):forballinself.balls:ball.move_ball()#run_ball每隔20毫秒會(huì)被調(diào)用一次self.canvas.after(20,self.run_ball)#destroy()是結(jié)束整個(gè)程序進(jìn)程defmyquit(self,event):self.root.destroy()框架設(shè)計(jì)第三步:總體框架設(shè)計(jì)完成后,需要設(shè)計(jì)本項(xiàng)目的核心部分,繪制彈球、設(shè)置彈動(dòng)效果。#創(chuàng)建一個(gè)隨機(jī)球處理類classSettingBalls:def__init__(self,canvas,scrnwidth,scrnheight):#Canvas是一個(gè)長(zhǎng)方形的面積,圖畫或其他復(fù)雜的布局??梢苑胖迷诋嫴忌系膱D形,文字,部件,或是幀self.canvas=canvas#tkinter繪圖采用屏幕坐標(biāo)系,原點(diǎn)在左上角,x從左往右遞增,y從上往下
遞增#在繪圖區(qū)域內(nèi),隨機(jī)產(chǎn)生當(dāng)前球的圓心的x坐標(biāo)和y坐標(biāo),用于制定出現(xiàn)的位置self.xpos=randint(10,int(scrnwidth))self.ypos=randint(10,int(scrnheight))#在繪圖區(qū)域內(nèi),隨機(jī)產(chǎn)生當(dāng)前球的x坐標(biāo)
和y坐標(biāo)
的向量#在數(shù)學(xué)中,幾何向量(也稱矢量),指具有大小和方向的量#這里可以用來表示球的速度self.xvelocity=randint(6,12)self.yvelocity=randint(6,12)#隨機(jī)產(chǎn)生表示當(dāng)前球的大小,也就是半徑長(zhǎng)度self.radius=randint(40,70)#通過lambda表達(dá)式創(chuàng)建函數(shù)對(duì)象r,每次調(diào)用r()都會(huì)產(chǎn)生0~255之間的數(shù)字r=lambda:randint(0,255)#三次調(diào)用的數(shù)字取前兩位,用十六進(jìn)制數(shù)方式存儲(chǔ)到self.color里,作為球的顏色##RRGGBB,前2是紅色,中2是綠色,后2是藍(lán)色,最小是0,最大是F,#如
全黑#000000全白#FFFFFF全紅#FF0000self.color="#%02x%02x%02x"%(r(),r(),r())#獲取整個(gè)繪圖場(chǎng)景的寬度和高度(也就是屏幕分辨率大?。﹕elf.scrnwidth=scrnwidthself.scrnheight=scrnheight框架設(shè)計(jì)defcreate_ball(self):#canvas.create_oval()可以繪制一個(gè)圓#但是需要傳入圓的左、上、右、下四個(gè)坐標(biāo)#先產(chǎn)生四個(gè)坐標(biāo),通過這個(gè)四個(gè)坐標(biāo),繪制圓的大小#左坐標(biāo)=x坐標(biāo)-半徑
x1=self.xpos-self.radius#上左邊=y坐標(biāo)-半徑y(tǒng)1=self.ypos-self.radius#右坐標(biāo)=x坐標(biāo)+半徑x2=self.xpos+self.radius#下坐標(biāo)=y坐標(biāo)-半徑y(tǒng)2=self.ypos+self.radius#通過canvas.create_oval()方法繪出整個(gè)圓,填充色
和
輪廓色分別是self.color生成的顏色self.ball=self.canvas.create_oval(x1,y1,x2,y2,fill=self.color,outline=self.color)defmove_ball(self):
"""
進(jìn)行相應(yīng)的移動(dòng),如果坐標(biāo)超過屏幕邊緣則向相反方向移動(dòng)
"""#讓球的x坐標(biāo)和y坐標(biāo),按照向量的大小進(jìn)行增加,表示球的運(yùn)行,向下和向右self.xpos+=self.xvelocityself.ypos+=self.yvelocity#如果球的y坐標(biāo)
大于等于
屏幕高度
和
球的半徑
的差,則調(diào)整球的運(yùn)行y軸方向朝上ifself.ypos>=self.scrnheight-self.radius:self.yvelocity=-self.yvelocity#如果球的y坐標(biāo)
小于等于
屏幕高度
和
球的半徑
的差,則調(diào)整球的y軸運(yùn)行方向朝下ifself.ypos<=self.radius:self.yvelocity=abs(self.yvelocity)#如果球的x坐標(biāo)
大于等于
屏幕寬度
和
球的半徑
的差,則調(diào)整球的運(yùn)行x軸方向朝左ifself.xpos>=self.scrnwidth-self.radius:self.xvelocity=-self.xvelocity#如果球的x坐標(biāo)
小于等于
屏幕寬度
和
球的半徑
的差,則調(diào)整球的運(yùn)行x軸方向朝右ifself.xpos<=self.radius:self.xvelocity=abs(self.xvelocity)#調(diào)用canvas對(duì)象的move()方法可以讓對(duì)象動(dòng)起來,參數(shù)是對(duì)象,以及對(duì)象x軸和y軸的向量大小self.canvas.move(self.ball,self.xvelocity,self.yvelocity)此時(shí)項(xiàng)目代碼基本編寫完畢,最后設(shè)置彈球個(gè)數(shù),運(yùn)行程序。if__name__=="__main__":
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024幼兒園租賃合同(包括幼兒園特色課程開發(fā)及教學(xué)成果展示)3篇
- 2016-2020年印度尼西亞投資環(huán)境分析及前景預(yù)測(cè)報(bào)告
- 出差管理制度及出差標(biāo)準(zhǔn)
- 2024年租房付款條款3篇
- 2025年度離婚協(xié)議書定制與婚姻財(cái)產(chǎn)分割法律援助合同3篇
- 2024版消防安裝工程施工合同書
- 重慶旅游職業(yè)學(xué)院《病原微生物學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年度15%股權(quán)轉(zhuǎn)讓與市場(chǎng)推廣服務(wù)合同2篇
- 山西大學(xué)《航空計(jì)算機(jī)組成與結(jié)構(gòu)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年度餐廳智能化改造承包經(jīng)營(yíng)合同3篇
- 實(shí)用性閱讀與交流任務(wù)群設(shè)計(jì)思路與教學(xué)建議
- 應(yīng)急柜檢查表
- 中醫(yī)診療器具清洗消毒(醫(yī)院感染防控專家課堂培訓(xùn)課件)
- 通風(fēng)設(shè)施標(biāo)準(zhǔn)
- 酒店市場(chǎng)營(yíng)銷教案
- 寵物智能用品項(xiàng)目計(jì)劃書【模板范文】
- 藥廠生產(chǎn)車間現(xiàn)場(chǎng)管理-PPT課件
- 軸與孔標(biāo)準(zhǔn)公差表
- 防火門施工方案
- 你比劃我猜題目大全
- 人教PEP版2022-2023六年級(jí)英語上冊(cè)期末試卷及答案(含聽力材料)
評(píng)論
0/150
提交評(píng)論