python GUI實(shí)現(xiàn)小球滿屏亂跑效果
本文實(shí)例為大家分享了python GUI實(shí)現(xiàn)小球滿屏亂跑效果的具體代碼,供大家參考,具體內(nèi)容如下
學(xué)習(xí)tkinter有一段時(shí)間了,綜合運(yùn)用一下,做一個(gè)類似屏保類的東西,碰到屏幕邊緣就反彈回來(lái)的那種。
初級(jí)篇:上下單向移動(dòng)
from tkinter import * import random import time # #創(chuàng)建一個(gè)類,這個(gè)類含有兩個(gè)參數(shù),一個(gè)是畫(huà)布,一個(gè)是球的顏色 # class Ball: def __init__(self,canvas,color): self.canvas = canvas self.id = canvas.create_oval(10,10,25,25,fill=color) self.canvas.move(self.id,245,100) #來(lái)回反彈 self.x = 0 self.y = -1 #winfo_height()函數(shù)來(lái)獲取畫(huà)布當(dāng)前的高度,賦值給對(duì)象變量 self.canvas_height = self.canvas.winfo_height() def draw(self): self.canvas.move(self.id,self.x,self.y) #獲取某個(gè)對(duì)象在畫(huà)布的坐標(biāo),返回一個(gè)數(shù)組(兩個(gè)坐標(biāo),左上角的坐標(biāo)和右下角的兩個(gè)坐標(biāo)) pos = self.canvas.coords(self.id) #打印獲取的坐標(biāo) print(pos) #如果最上面的縱軸坐標(biāo)在頂上,則往下移動(dòng)一個(gè)像素 if pos[1] <= 0: self.y = 1 #如果最下面的縱軸坐標(biāo)在底上,則向上移動(dòng) if pos[3] > self.canvas_height: self.y = -1 #創(chuàng)建畫(huà)布 tk = Tk() tk.title("Game_ball") tk.resizable(0,0) tk.wm_attributes("-topmost",1) #bd=0,highlightthickness=0 畫(huà)布之外沒(méi)有邊框 canvas = Canvas(tk,width=500,height=400,bd=0,highlightthickness=0) canvas.pack() tk.update() #創(chuàng)建對(duì)象 ball = Ball(canvas,'red') #一直保持循環(huán) while 1: ball.draw() #快速刷新屏幕 tk.update_idletasks() tk.update() time.sleep(0.01)
這個(gè)移動(dòng)的效果是上下移動(dòng)的。
進(jìn)階篇:隨機(jī)移動(dòng)
######################### #上面的例子小球只能上下移動(dòng),這次改變下規(guī)則,使之能自由運(yùn)動(dòng),滿屏亂動(dòng),用random里面的洗牌函數(shù) ###################### from tkinter import * import random import time # #創(chuàng)建一個(gè)類,這個(gè)類含有兩個(gè)參數(shù),一個(gè)是畫(huà)布,一個(gè)是球的顏色 # class Ball: def __init__(self,canvas,color): self.canvas = canvas self.id = canvas.create_oval(10,10,25,25,fill=color) self.canvas.move(self.id,245,100) #來(lái)回反彈 #--self.x = 0 #--self.y = -1 starts = [-3,-2,-1,1,2,3] random.shuffle(starts) self.x = starts[0] self.y = -3 #winfo_height()函數(shù)來(lái)獲取畫(huà)布當(dāng)前的高度,賦值給對(duì)象變量 self.canvas_height = self.canvas.winfo_height() #獲取X軸坐標(biāo) self.canvas_width = self.canvas.winfo_width() def draw(self): self.canvas.move(self.id,self.x,self.y) #獲取某個(gè)對(duì)象在畫(huà)布的坐標(biāo),返回一個(gè)數(shù)組(兩個(gè)坐標(biāo),左上角的坐標(biāo)和右下角的兩個(gè)坐標(biāo)) pos = self.canvas.coords(self.id) #打印獲取的坐標(biāo) print(pos) #如果最上面的縱軸坐標(biāo)在頂上,則往下移動(dòng)一個(gè)像素 if pos[1] <= 0: self.y = 1 #如果最下面的縱軸坐標(biāo)在底上,則向上移動(dòng) if pos[3] > self.canvas_height: self.y = -1 #寬度控制# #如果在左邊框了,那么向右邊移動(dòng)3像素 if pos[0] <= 0: self.x = 3 #如果到右邊框了,左移動(dòng)3像素 if pos[2] > self.canvas_width: self.x = -3 #創(chuàng)建畫(huà)布 tk = Tk() tk.title("Game_ball") tk.resizable(0,0) tk.wm_attributes("-topmost",1) #bd=0,highlightthickness=0 畫(huà)布之外沒(méi)有邊框 canvas = Canvas(tk,width=500,height=400,bd=0,highlightthickness=0) canvas.pack() tk.update() #創(chuàng)建對(duì)象 ball = Ball(canvas,'red') #一直保持循環(huán) while 1: ball.draw() #快速刷新屏幕 tk.update_idletasks() tk.update() time.sleep(0.01)
這個(gè)就達(dá)到了小球滿屏亂跑的效果。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python回溯算法實(shí)現(xiàn)全排列小練習(xí)分享
這篇文章主要給大家分享的是python回溯算法實(shí)現(xiàn)全排列小練習(xí),文章根據(jù)例子:輸入列表L(不含重復(fù)元素),輸出L的全排列展開(kāi)學(xué)習(xí),需要的小伙伴可以參考一下2022-02-02Python?Web?App開(kāi)發(fā)Dockerfiles編寫示例
這篇文章主要為大家介紹了Python?Web?App編寫Dockerfiles的示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Python調(diào)用shell cmd方法代碼示例解析
這篇文章主要介紹了Python調(diào)用shell cmd方法代碼示例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Python操作PostgreSql數(shù)據(jù)庫(kù)的方法(基本的增刪改查)
這篇文章主要介紹了Python操作PostgreSql數(shù)據(jù)庫(kù)(基本的增刪改查),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12