python GUI實現小球滿屏亂跑效果

這篇文章主要爲大家詳細介紹了python GUI實現小球滿屏亂跑效果,具有一定的參考價值,感興趣的小夥伴們可以參考一下

本文實例爲大家分享了python GUI實現小球滿屏亂跑效果的具體代碼,供大家參考,具體內容如下

學習tkinter有一段時間了,綜合運用一下,做一個類似屏保類的東西,碰到屏幕邊緣就反彈回來的那種。

初級篇:上下單向移動

from tkinter import *
import random
import time
#
#創建一個類,這個類含有兩個參數,一個是畫布,一個是球的顏色
#
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)
 #來回反彈
 self.x = 0
 self.y = -1
 #winfo_height()函數來獲取畫布當前的高度,賦值給對象變量
 self.canvas_height = self.canvas.winfo_height()
 def draw(self):
 self.canvas.move(self.id,self.x,self.y)
 #獲取某個對象在畫布的座標,返回一個數組(兩個座標,左上角的座標和右下角的兩個座標)
 pos = self.canvas.coords(self.id)
 #打印獲取的座標
 print(pos)
 #如果最上面的縱軸座標在頂上,則往下移動一個像素
 if pos[1] <= 0:
 self.y = 1
 #如果最下面的縱軸座標在底上,則向上移動
 if pos[3] > self.canvas_height:
 self.y = -1


#創建畫布
tk = Tk()
tk.title("Game_ball")
tk.resizable(0,0)
tk.wm_attributes("-topmost",1)
#bd=0,highlightthickness=0 畫布之外沒有邊框
canvas = Canvas(tk,width=500,height=400,bd=0,highlightthickness=0)
canvas.pack()
tk.update()

#創建對象 
ball = Ball(canvas,'red')

#一直保持循環
while 1:
 ball.draw()
 #快速刷新屏幕
 tk.update_idletasks()
 tk.update()
 time.sleep(0.01)

這個移動的效果是上下移動的。

進階篇:隨機移動

#########################
#上面的例子小球只能上下移動,這次改變下規則,使之能自由運動,滿屏亂動,用random裏面的洗牌函數
######################
from tkinter import *
import random
import time
#
#創建一個類,這個類含有兩個參數,一個是畫布,一個是球的顏色
#
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)
 #來回反彈
 #--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()函數來獲取畫布當前的高度,賦值給對象變量
 self.canvas_height = self.canvas.winfo_height()
 #獲取X軸座標
 self.canvas_width = self.canvas.winfo_width()
 def draw(self):
 self.canvas.move(self.id,self.x,self.y)
 #獲取某個對象在畫布的座標,返回一個數組(兩個座標,左上角的座標和右下角的兩個座標)
 pos = self.canvas.coords(self.id)
 #打印獲取的座標
 print(pos)
 #如果最上面的縱軸座標在頂上,則往下移動一個像素
 if pos[1] <= 0:
 self.y = 1
 #如果最下面的縱軸座標在底上,則向上移動
 if pos[3] > self.canvas_height:
 self.y = -1
 #寬度控制#
 #如果在左邊框了,那麼向右邊移動3像素
 if pos[0] <= 0:
 self.x = 3
 #如果到右邊框了,左移動3像素
 if pos[2] > self.canvas_width:
 self.x = -3


#創建畫布
tk = Tk()
tk.title("Game_ball")
tk.resizable(0,0)
tk.wm_attributes("-topmost",1)
#bd=0,highlightthickness=0 畫布之外沒有邊框
canvas = Canvas(tk,width=500,height=400,bd=0,highlightthickness=0)
canvas.pack()
tk.update()

#創建對象 
ball = Ball(canvas,'red')

#一直保持循環
while 1:
 ball.draw()
 #快速刷新屏幕
 tk.update_idletasks()
 tk.update()
 time.sleep(0.01)

這個就達到了小球滿屏亂跑的效果。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持神馬文庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章