python GUI實現(xiàn)小球滿屏亂跑效果
更新時間:2019年05月09日 15:14:45 作者:x6_9x
這篇文章主要為大家詳細介紹了python GUI實現(xiàn)小球滿屏亂跑效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了python GUI實現(xiàn)小球滿屏亂跑效果的具體代碼,供大家參考,具體內(nèi)容如下
學習tkinter有一段時間了,綜合運用一下,做一個類似屏保類的東西,碰到屏幕邊緣就反彈回來的那種。
初級篇:上下單向移動
from tkinter import *
import random
import time
#
#創(chuàng)建一個類,這個類含有兩個參數(shù),一個是畫布,一個是球的顏色
#
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()函數(shù)來獲取畫布當前的高度,賦值給對象變量
self.canvas_height = self.canvas.winfo_height()
def draw(self):
self.canvas.move(self.id,self.x,self.y)
#獲取某個對象在畫布的坐標,返回一個數(shù)組(兩個坐標,左上角的坐標和右下角的兩個坐標)
pos = self.canvas.coords(self.id)
#打印獲取的坐標
print(pos)
#如果最上面的縱軸坐標在頂上,則往下移動一個像素
if pos[1] <= 0:
self.y = 1
#如果最下面的縱軸坐標在底上,則向上移動
if pos[3] > self.canvas_height:
self.y = -1
#創(chuàng)建畫布
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()
#創(chuàng)建對象
ball = Ball(canvas,'red')
#一直保持循環(huán)
while 1:
ball.draw()
#快速刷新屏幕
tk.update_idletasks()
tk.update()
time.sleep(0.01)
這個移動的效果是上下移動的。


進階篇:隨機移動
#########################
#上面的例子小球只能上下移動,這次改變下規(guī)則,使之能自由運動,滿屏亂動,用random里面的洗牌函數(shù)
######################
from tkinter import *
import random
import time
#
#創(chuàng)建一個類,這個類含有兩個參數(shù),一個是畫布,一個是球的顏色
#
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()函數(shù)來獲取畫布當前的高度,賦值給對象變量
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)
#獲取某個對象在畫布的坐標,返回一個數(shù)組(兩個坐標,左上角的坐標和右下角的兩個坐標)
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
#創(chuàng)建畫布
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()
#創(chuàng)建對象
ball = Ball(canvas,'red')
#一直保持循環(huán)
while 1:
ball.draw()
#快速刷新屏幕
tk.update_idletasks()
tk.update()
time.sleep(0.01)
這個就達到了小球滿屏亂跑的效果。



以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python?Web?App開發(fā)Dockerfiles編寫示例
這篇文章主要為大家介紹了Python?Web?App編寫Dockerfiles的示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06
Python調(diào)用shell cmd方法代碼示例解析
這篇文章主要介紹了Python調(diào)用shell cmd方法代碼示例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06
Python操作PostgreSql數(shù)據(jù)庫的方法(基本的增刪改查)
這篇文章主要介紹了Python操作PostgreSql數(shù)據(jù)庫(基本的增刪改查),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12

