# 庆祝法国队夺冠：用Python放一场烟花秀

```import tkinter as tk
from PIL import Image, ImageTk
from time import time, sleep
from random import choice, uniform, randint
from math import sin, cos, radians

```root = tk.Tk()

```w = tk.Label(root, text="Hello Tkinter!")

```w.pack()
root.mainloop()

```'''
Generic class for particles

particles are emitted almost randomly on the sky, forming a round of circle (a star) before falling and getting removed
from canvas

Attributes:
- id: identifier of a particular particle in a star
- x, y: x,y-coordinate of a star (point of explosion)
- vx, vy: speed of particle in x, y coordinate
- total: total number of particle in a star
- age: how long has the particle last on canvas
- color: self-explantory
- cv: canvas
- lifespan: how long a particle will last on canvas
- intial_speed: speed of particle at explosion

'''
class part:
def __init__(self, cv, idx, total, explosion_speed, x=0., y=0., vx = 0., vy = 0., size=2., color = 'red', lifespan = 2, **kwargs):
self.id = idx
self.x = x
self.y = y
self.initial_speed = explosion_speed
self.vx = vx
self.vy = vy
self.total = total
self.age = 0
self.color = color
self.cv = cv
self.cid = self.cv.create_oval(
x - size, y - size, x + size,
y + size, fill=self.color)
self.lifespan = lifespan

```def update(self, dt):
# 粒子膨胀
if self.alive() and self.expand():
self.vx = move_x/(float(dt)*1000)
self.vy = move_y/(float(dt)*1000)
self.cv.move(self.cid, move_x, move_y)

# 以自由落体坠落
elif self.alive():
# we technically don't need to update x, y because move will do the job
self.cv.move(self.cid, self.vx + move_x, self.vy+GRAVITY*dt)
self.vy += GRAVITY*dt

# 如果粒子的生命周期已过，就将其移除
elif self.cid is not None:
cv.delete(self.cid)
self.cid = None

```# 定义膨胀效果的时间帧
def expand (self):
return self.age <= 1.2

# 检查粒子是否仍在生命周期内
def alive(self):
return self.age <= self.lifespan

```numb_explode = randint(6,10)
# 为所有模拟烟花绽放的全部粒子创建一列列表
for point in range(numb_explode):
objects = []
x_cordi = randint(50,550)
y_cordi = randint(50, 150)
size = uniform (0.5,3)
color = choice(colors)
explosion_speed = uniform(0.2, 1)
total_particles = randint(10,50)
for i in range(1,total_particles):
r = part(cv, idx = i, total = total_particles, explosion_speed = explosion_speed, x = x_cordi, y = y_cordi,
color=color, size = size, lifespan = uniform(0.6,1.75))
objects.append(r)
explode_points.append(objects)

```total_time = .0
# 在1.8秒时间帧内保持更新
while total_time < 1.8:
sleep(0.01)
tnew = time()
t, dt = tnew, tnew - t
for point in explode_points:
for part in point:
part.update(dt)
cv.update()
total_time += dt

```if __name__ == '__main__':
root = tk.Tk()
cv = tk.Canvas(root, height=600, width=600)
# 绘制一个黑色背景
cv.create_rectangle(0, 0, 600, 600, fill="black")
cv.pack()

root.protocol("WM_DELETE_WINDOW", close)
# 在1秒后才开始调用stimulate()
root.after(100, simulate, cv)
root.mainloop()

0 条评论

• ### 国庆过完了, 想要知道哪些景点爆满, Python告诉你!

举国欢庆的国庆节马上就要到来了，你想好去哪里看人山人海了吗？还是窝在家里充电学习呢？说起国庆，塞车与爆满这两个词必不可少，去年国庆我在想要是我能提前知道哪些景点...

• ### 用Python每秒钟下载一张高清大图，快不快？

如果爬虫需要展现速度，我觉得就是去下载图片吧，原本是想选择去煎蛋那里下载图片的，那里的美女图片都是高质量的，我稿子都是差不多写好了的，无奈今天重新看下，妹子图的...

• ### Python抓取炉石传说卡牌，做一个女神的拼图游戏

网站其实已经加载了所有的卡牌原画 只是之后的原画做了隐藏处理默认不展示  style=display

• ### Python3结合Sciter编写桌面

但由于是同一个进程，如果你做了很耗时的操作，比如下载一张图片之类的IO操作......

• ### Simplex 单纯形算法的python

算法可以在给定一个包含线性规划问题的标准形式的描述下，求解该线性规划问题。 例如某一个 pro.txt 文件内容如下:

• ### python post传输文件脚本

ps：背景，无法ssh相互访问机器(一般中间有堡垒机阻拦)的情况下，但是使用域名可以进行访问的情况下 可以使用http协议进行文件的上传。

• ### 小甲鱼《零基础学习Python》课后笔记（三十七）：类和对象——面向对象编程

1.当程序员不想把同一段代码写几次，他们发明了函数解决了这种情况。当程序员已经有了一个类，而又想建立一个非常接近的新类，他们会怎么做呢？ 定义一个新类继承已有...

• ### 致青春--Python实现俄罗斯方块

俄罗斯方块游戏是世界上最流行的游戏之一。是由一名叫Alexey Pajitnov的俄罗斯程序员在1985年制作的，从那时起，这个游戏就风靡了各个游戏平台，而且俄...

• ### ReactiveCocoa使用心得

5.NSMutableArray 因为NSMutableArray不支持KVO，所以用另外一个方式处理：