大家好!今天給你們帶來了用tkinter寫的python煙花效果,點選滑鼠即可觸發。
完整例項:
import tkinter as tk
import random
# 定義隨機顏色函式
defrandom_color():
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
return f'#{r:02x}{g:02x}{b:02x}'
# 定義煙花類
classFirework:
def__init__(self, canvas, x, y):
self.canvas = canvas
self.x = x
self.y = y
self.color = random_color()
self.radius = 2
self.particles = []
self.create_particles()
self.lifespan = 100# 設定煙花消失的時間
# 建立粒子效果
defcreate_particles(self):
for i in range(120):
vx = random.uniform(-1, 1) * 8
vy = random.uniform(-1, 1) * 8
particle = self.canvas.create_oval(self.x, self.y, self.x+self.radius, self.y+self.radius, fill=self.color)
self.particles.append((particle, vx, vy))
# 更新煙花效果
defupdate(self):
self.radius += 0.5
self.lifespan -= 1
for particle inself.particles:
self.canvas.move(particle[0], particle[1], particle[2])
particle_position = self.canvas.coords(particle[0])
# 刪除飛出螢幕的粒子
if particle_position[0] < 0or particle_position[1] < 0or particle_position[2] > 800or particle_position[3] > 600:
self.canvas.delete(particle[0])
self.particles.remove(particle)
# 刪除所有粒子後刪除煙花
ifnotself.particles orself.lifespan <= 0:
self.canvas.delete(self.firework_id)
# 啟動煙花效果
deffire(self):
self.firework_id = self.canvas.create_oval(self.x, self.y, self.x+self.radius, self.y+self.radius, fill=self.color)
self.canvas.after(10, self.launch)
# 發射煙花
deflaunch(self):
self.update()
ifself.particles:
self.canvas.after(10, self.launch)
# 建立Tkinter視窗
root = tk.Tk()
root.geometry('800x600')
# 建立畫布
canvas = tk.Canvas(root, bg='black')
canvas.pack(fill=tk.BOTH, expand=1)
# 點選事件處理常式
defon_click(event):
x = event.x
y = event.y
firework = Firework(canvas, x, y)
firework.fire()
# 繫結點選事件
canvas.bind('<Button-1>', on_click)
# 啟動Tkinter事件迴圈
root.mainloop()