2021 已经接近尾声了,2022 即将到来,本文我们用 Python 送你一场跨年烟花秀。

我们用到的 Python 模块包括:tkinter、PIL、time、random、math,如果第三方模块没有装的话,pip install 一下即可,下面看一下代码实现。

导库

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

colors = ['red', 'blue', 'yellow', 'white', 'green', 'orange', 'purple', 'seagreen', 'indigo', 'cornflowerblue']
1
定义烟花类
class fireworks: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# 烟花绽放 x 轴self.x = x# 烟花绽放 x 轴self.y = yself.initial_speed = explosion_speed# 外放 x 轴速度self.vx = vx# 外放 y 轴速度self.vy = vy# 绽放的粒子数self.total = total# 已停留时间self.age = 0# 颜色self.color = color# 画布self.cv = cvself.cid = self.cv.create_oval(x - size, y - size, x + size, y + size,fill=self.color)self.lifespan = lifespan
    # 更新数据def update(self, dt):self.age += dt# 粒子膨胀if self.alive() and self.expand():move_x = cos(radians(self.id * 360 / self.total)) * self.initial_speedmove_y = sin(radians(self.id * 360 / self.total)) * self.initial_speedself.cv.move(self.cid, move_x, move_y)self.vx = move_x / (float(dt) * 1000)# 膨胀到最大下落elif self.alive():move_x = cos(radians(self.id * 360 / self.total))self.cv.move(self.cid, self.vx + move_x, self.vy + 0.5 * dt)self.vy += 0.5 * dt# 过期移除elif self.cid is not None:cv.delete(self.cid)self.cid = None# 定义膨胀效果的时间帧def expand(self):return self.age <= 1.5# 检查粒子是否仍在生命周期内def alive(self):return self.age <= self.lifespan
燃放烟花
def ignite(cv):t = time()# 烟花列表explode_points = []wait_time = randint(10, 100)# 爆炸的个数numb_explode = randint(6, 10)for point in range(numb_explode):# 爆炸粒子列表objects = []# 爆炸 x 轴x_cordi = randint(50, 550)# 爆炸 y 轴y_cordi = randint(50, 150)speed = uniform(0.5, 1.5)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 = fireworks(cv, idx=i, total=total_particles, explosion_speed=explosion_speed, x=x_cordi, y=y_cordi,vx=speed, vy=speed, 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:# 让画面暂停 0.01ssleep(0.01)# 刷新时间tnew = time()t, dt = tnew, tnew - t# 遍历烟花列表for point in explode_points:# 遍历烟花里的粒子列表for item in point:# 更新时间item.update(dt)# 刷新页面cv.update()total_time += dtroot.after(wait_time, ignite, cv)
启动
if __name__ == "__main__":root = tk.Tk()# 绘制一个画布cv = tk.Canvas(root, height=400, width=600)# 背景图image = Image.open("bg.jpg")photo = ImageTk.PhotoImage(image)# 在画板上绘制一张图片cv.create_image(0, 0, image=photo, anchor='nw')cv.pack()root.protocol(close)root.after(100, ignite, cv)# 生成窗口root.mainloop()

看一下效果:

2022跨年烟花代码、用Python送你一场跨年烟花秀相关推荐

  1. 2022跨年烟花代码|用Python送你一场跨年烟花秀

    2021 已经接近尾声了,2022 即将到来,本文我们用 Python 送你一场跨年烟花秀. 我们用到的 Python 模块包括:tkinter.PIL.time.random.math,如果第三方模 ...

  2. 2023跨年烟花代码|用Python送你一场跨年烟花秀

    已经接近尾声了,2023 即将到来,本文我们用 Python 送你一场跨年烟花秀. 我们用到的 Python 模块包括:tkinter.PIL.time.random.math,如果第三方模块没有装的 ...

  3. Python带你跨年!用Python送你一场跨年烟花秀

    2021 已经接近尾声了,2022 即将到来,本文我们用 Python 送你一场跨年烟花秀. 我们用到的 Python 模块包括:tkinter.PIL.time.random.math,如果第三方模 ...

  4. 2022来了,用 Python 制作一场环保的烟花秀

    2022 来了,本文我们用 Python 送你一场跨年烟花秀. 我们用到的 Python 模块包括:tkinter.PIL.time.random.math,如果第三方模块没有装的话,pip inst ...

  5. thinkphp跨库操作代码实例

    实例一:配置config.php文件配置多个数据库配置 'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/thinkphp', 控制器中调用方法 ...

  6. 2022超nice的跨年烟花代码

    每一片雪花,每一个烟花,每一秒的时光流转,每一个思念的传递,都代表着你想要传递的每一个心愿:在这里提前祝大家新年快乐! 今天在这里给大家分享一个超级好看的烟花代码,纯html+js制作,效果如下: 预 ...

  7. 使用python实现跨年烟花代码

    朋友们,有多久没放烟花了?今年你所在的地方允许放烟花么?既然我们不能线下放,那么我们就在线上放个够吧(还是那句话:你~有~对~象~了~嘛~) 一下是动态图(图片我使用的我上几次的背景图,大家也可以换成 ...

  8. 2023跨年烟花代码HTML5夜景放烟花绽放动画效果

    2023跨年烟花代码HTML5夜景放烟花绽放动画效果 HTML5夜景放烟花绽放动画效果 html代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...

  9. 荐书与免费送书:《编写高质量代码改善 Python 程序的 91 个建议》

    为了学习如何打理好微信公众号,Python猫我关注了好几个python技术公众号.然后发现这些同行们都在免费送资源,或者抽奖送书耶.于是,我也去参与抽奖,竟然侥幸抽中啦一本<Python数据科学 ...

最新文章

  1. 资源利用率监控与存储卷(pv/pvc)
  2. Spring Boot+Vue从零开始搭建博客系统veblog(一):项目前端_vuejs环境搭建
  3. 搜索dwr做即时聊天的时候看到的问题
  4. Linux 命令之 tar 备份与解压缩
  5. MySQL之四种SQL性能分析工具
  6. C# 连接Access数据库
  7. CC2540/CC2541蓝牙4.0BLE协议栈开发
  8. 表格table转pdf分页不连续解决
  9. 学计算机逻辑思维能力测试题,逻辑思维能力测试题5道含答案
  10. 虚拟服务器软件哪个好,虚拟机软件哪个好?热门虚拟机软件推荐
  11. 大学计算机专业用ipad pro够用吗,苹果iPad Pro上很合适学生党的几个专业App
  12. Arm 架构的过程调用标准
  13. 一套最有效的商业模式,老板贷款80万开火锅店,开业就回本?
  14. 计算机中8位二进制机器数,一个字节由8位二进制数组成,其最大容纳的十进制整数为()...
  15. 19级HPU算法协会公开课第一期:【基础算法1】 题解
  16. Android 自定义view完全解析--带你通透了解自定义view
  17. 华为无线网卡插上服务器没反应,无限网卡插在台式机上没反应啊怎么解决
  18. 462 字节 C 代码实现雅虎 logo ACSII 动画
  19. TensorFlow-神经网络初体验
  20. python的学习记录

热门文章

  1. VScode下载安装+使用
  2. 盛世昊通签约万旗投资,打造汽车行业美好明天!
  3. Postman中认证CAS
  4. Anaconda 大疆 Tello EDU python 环境配置
  5. matlab中dare 和care,dare 的用法
  6. 看《赢在中国》的一点思绪
  7. “管家婆”软件用于维修管理
  8. 有限体积法(4)——一维扩散方程数值求解(第二类边界条件)
  9. nslookup 查邮件服务器地址
  10. IBM超级计算机揭秘最古老英语单词