#coding:utf-8 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) #返回剛好划小球的id,create_oval創建一個橢圓 self.canvas.move(self.id, 245, 100) #把橢圓移動到畫布 starts = [-3, -2, -1, 1, 2, 3] random.shuffle(starts) #隨機排列 self.x = starts[0] self.y = -3 self.canvas_height = self.canvas.winfo_height() #獲取畫布當前高度 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) #coords返回畫布上畫好的x和y坐標 #判斷小球是否撞到畫布頂部或者底部,保證小球反彈回去,不消失 if pos[1] <= 0: self.y = 3 if pos[3] >= self.canvas_height: self.y = -3 if pos[0] <= 0: self.x = 3 if pos[2] >= self.canvas_width: self.x = -3 tk = Tk() tk.title("Game") tk.resizable(0, 0) #窗口大小不可調整 tk.wm_attributes("-topmost", 1) #使畫布窗口置於所有窗口之前 canvas = Canvas(tk,width=500, height=400, bd=0, highlightthickness=0) #bd和highlighttthickness是為了保證畫布沒有邊框 canvas.pack() tk.update() #動畫初始化 ballone = Ball(canvas, 'red') balltwo = Ball(canvas, 'blue') while 1: #畫布一出現會馬上消失,為了防止畫布消失,用tkinter一直重畫 ballone.draw() balltwo.draw() tk.update_idletasks() tk.update() time.sleep(0.01)
效果
參考:
https://blog.csdn.net/qq_23948283/article/details/51637406?utm_source=blogxgwz6