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']

定义烟花类

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()

看一下效果:

源码在下方公号后台回复 f 获取~

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

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

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

  2. 2022跨年烟花代码、用Python送你一场跨年烟花秀

    2021 已经接近尾声了,2022 即将到来,本文我们用 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. Java查询spark中生成的文件_java+spark-sql查询excel
  2. 拥抱人工智能报告:中国未来就业的挑战与应对
  3. [Security]XSS一直是个棘手的问题
  4. 2019年云计算发展状态
  5. 天合公司 TRW Inc.
  6. 如何改造现有文件为 CMD 模块
  7. C语言预处理命令分类和工作原理
  8. android 瀑布流
  9. mysql获取当前时间的订单_mysql获取当前时间,及其相关操作
  10. Mysql运维管理-Mysql增量备份及分库分表备份数据恢复实战12
  11. Java面试之谈谈对CAS的理解
  12. 检查数组中的子字符串– Java,Python和Swift
  13. python—itertools模块常用函数
  14. JavaScript编程用法——JavaScript运行环境
  15. SPSS之多因素方差分析
  16. 二元函数连续与偏导数存在的关系_二元函数连续、偏导数和全微分之间的关系...
  17. linux 内核kenel优化方案一 -O3编译 Makefile
  18. powerVR tbdr 硬件架构理解
  19. 耿建超英语语法---非谓语动词作同位语和定语
  20. html5立体照片墙效果,jQuery超酷3D网格照片墙动画特效 -HTML5功能

热门文章

  1. 数据中心服务在资源整合过程的实践
  2. Java 实现PDF转图片,去除PDF水印,图片转PDF
  3. 区块链成热点赛道,云技术如何赋能结合?
  4. 一文了解波卡上的跨链协议X Protocol :基于web3.0将应用链接元宇宙的有效途径
  5. 软件公司,销售管理门道(七)销售协同
  6. 《大学章句集注》-读书笔记之一
  7. 斯皮格尔:我们敢于采纳非常疯狂的创意
  8. 贪心策略:请你设计最优的安排会议日程表,以使得举行的会议数最多
  9. Flutter升级3.0
  10. PHP 制作通讯录(一)