python+tkinter+canvas实现天降棒棒糖,生活甜甜蜜蜜
Posted dhjabc_1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python+tkinter+canvas实现天降棒棒糖,生活甜甜蜜蜜相关的知识,希望对你有一定的参考价值。
python+tkinter+canvas实现天降棒棒糖,生活甜甜蜜蜜。
一、先看看效果吧。
直接开始介绍了吧。
二、准备资源图片
通过ps或者ppt软件把这个图片抠图干净,就会出来的效果好看些。
三、实现逻辑
(一)自定义棒棒糖类
class Ball:
def __init__(self, canvas,root):
self.canvas = canvas
self.root = root
self.image = Image.open('bbt.png').resize((30, 30))
def create_ball(self):
self.xpos = randint(50,self.root.winfo_width()-50)
self.ypos = randint(-self.root.winfo_height(),0)
self.vect = randint(1,3)
self.tkimage = ImageTk.PhotoImage(self.image)
self.canvas_obj = canvas.create_image(self.xpos, self.ypos, image=self.tkimage)
def move_ball(self):
# self.xpos += 1
self.ypos += self.vect
if self.ypos > self.root.winfo_height():
self.xpos = randint(50, self.root.winfo_width() - 50)
self.ypos = randint(-50, 0)
self.vect = randint(1,3)
self.tkimage = ImageTk.PhotoImage(self.image)
self.canvas_obj = canvas.create_image(self.xpos, self.ypos, image=self.tkimage)
(二)随机生成棒棒糖实体
balls = []
num = 50
for i in range(num):
ball = Ball(canvas, tk)
ball.create_ball()
balls.append(ball)
(三)不断update位置信息
move_balls()
def move_balls():
for ball in balls:
ball.move_ball()
canvas.after(20, move_balls)
(四)让窗体透明
def on_resize(evt):
tk.configure(width=evt.width,height=evt.height)
canvas.create_rectangle(0, 0, canvas.winfo_width(), canvas.winfo_height(), fill=TRANSCOLOUR, outline=TRANSCOLOUR)
四、完整代码
from tkinter import *
from random import *
import math
from PIL import Image,ImageTk
class Ball:
def __init__(self, canvas,root):
self.canvas = canvas
self.root = root
self.image = Image.open('bbt.png').resize((30, 30))
def create_ball(self):
self.xpos = randint(50,self.root.winfo_width()-50)
self.ypos = randint(-self.root.winfo_height(),0)
self.vect = randint(1,3)
self.tkimage = ImageTk.PhotoImage(self.image)
self.canvas_obj = canvas.create_image(self.xpos, self.ypos, image=self.tkimage)
def move_ball(self):
# self.xpos += 1
self.ypos += self.vect
if self.ypos > self.root.winfo_height():
self.xpos = randint(50, self.root.winfo_width() - 50)
self.ypos = randint(-50, 0)
self.vect = randint(1,3)
self.tkimage = ImageTk.PhotoImage(self.image)
self.canvas_obj = canvas.create_image(self.xpos, self.ypos, image=self.tkimage)
def move_balls():
for ball in balls:
ball.move_ball()
canvas.after(20, move_balls)
def on_resize(evt):
tk.configure(width=evt.width,height=evt.height)
canvas.create_rectangle(0, 0, canvas.winfo_width(), canvas.winfo_height(), fill=TRANSCOLOUR, outline=TRANSCOLOUR)
# canvas.create_oval(240, 30, 330, 200,
# outline='yellow', # 边框颜色
# fill='pink', # 填充颜色
# width=4 # 边框宽度
# )
print(canvas.winfo_width())
if __name__ == '__main__':
TRANSCOLOUR = 'gray'
tk = Tk()
tk.geometry('800x600+300+100')
tk.title('天降棒棒糖咯,生活甜甜蜜蜜咯!!!')
tk.wm_attributes('-transparentcolor', TRANSCOLOUR)
tk.wm_attributes("-topmost", 1)
tk.bind('<Configure>', on_resize)
# tk.overrideredirect(1)
canvas = Canvas(tk)
tk.winfo_width()
canvas.pack(fill=BOTH, expand=Y)
# canvas.config(highlightthickness=0)
tk.update()
balls = []
num = 50
for i in range(num):
ball = Ball(canvas, tk)
ball.create_ball()
balls.append(ball)
move_balls()
tk.mainloop()
五、运行效果
好吧,写完,希望对你有帮忙。
以上是关于python+tkinter+canvas实现天降棒棒糖,生活甜甜蜜蜜的主要内容,如果未能解决你的问题,请参考以下文章
python+tkinter+canvas实现天降棒棒糖,生活甜甜蜜蜜
python+tkinter+canvas实现天降棒棒糖,生活甜甜蜜蜜
Python3 tkinter,怎么在Label/Canvas中插入图片?
Python3 Tkinter基础 Python3 Tkinter基础 Canvas create_rectangle 画一个矩形