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

看一下效果:

源码已经打包整理好了,有需要的可以在下方获取

领取方式:

资料已打包,获取前记得点赞、收藏、关注。获取方法有两种:

  • 方式一、发送如下图片至微信,长按识别,回复:烟花
  • 方式二、微信搜索公众号:Python学习与数据挖掘,后台回复:烟花

2022来了,用 Python 制作一场环保的烟花秀相关推荐

  1. 小年到了,用 Python 实现一场环保无污染的烟花秀,祝大家节日快乐

    烟花由中国古代人民较早发明,常用于盛大的典礼或表演中,也在除夕夜及元宵节中燃放用来烘托节日氛围.小年到了,但是近年来随着环境污染的加剧,一些地区已经禁止燃放烟花了,那我们就用 Python 实现一场无 ...

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

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

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

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

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

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

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

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

  6. 利用python和前端三件套来一场线上烟花秀

    目录 python烟花秀 效果展示: 全部代码如下: 前端三件套(JS.CSS.HTML)的烟花秀 HTML部分:定义网页内容 CSS部分:描述网页布局 JS部分:控制网页行为 End ✨✨✨✨✨✨✨ ...

  7. 马上跨年了,用Python带你看一场跨年烟花秀

    导语:你有多久没看过一场烟花了(源码放最后啦) 可算是在零点看到了一场灿烂烟花~小时候每年跨年都是要买一堆各式各样的烟花发的,仙女棒~冲天炮年年都玩不腻.可是后来污染实在是太严重,小孩放烟花的安全隐患 ...

  8. 用 Python 实现一场环保无污染的烟花秀

    导语 给你们除夕礼物想看烟花✨吗小编已经给你们打包

  9. python系列之炫酷新年烟花秀

    新年即将来到,不给小伙伴们安排一下烟花代码吗!!! 第一步 打开python charm 第二步 创建项目 第三步 复制粘贴以下代码 最后一步 运行程序 import pygame from rand ...

最新文章

  1. 大型软件公司.Net面试题(一)
  2. ubuntu服务器在虚拟机中的配置
  3. kettle读取json文件并读取数据_Labview打开Excel文件读取数据
  4. activiti dmn_端到端BPM(带有DMN标记)
  5. 光纤收发器相比其他数据交换器有哪些优势?
  6. 使用mpvue开发小程序
  7. SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)...
  8. 实体摘要系统的解释性评测
  9. 由项目中的一个小问题所联想到的。
  10. android手机误删通讯录恢复
  11. linux系统查看java安装路径
  12. 解决启动CAD时没有响应
  13. JS设计模式-单例模式
  14. 给wordpess博客的数据库减肥提速
  15. 使用JavaScript获取当前时间方法(AM、PM)
  16. word中插入未压缩的原图
  17. 在使用开源IOT平台Thingsboard时,遇到的编译问题一initial exceeded maximum budget
  18. [Angular] 使用 ng-alain
  19. JAVA基础6.52——多态的描述(2)
  20. 小程序优购商城项目讲解

热门文章

  1. 如何利用Trimble RealWorks三维激光扫描仪进行外业测量和内业处理?
  2. 汉字转拼音(pinyin4j)
  3. 将本地数据倒入到Hive
  4. LVDS、LVPECL、CML、miniLVDS、RSDS
  5. 全境封锁:背水一战 - 概念艺术
  6. git: fatal: detected dubious ownership
  7. WWH - HTTP
  8. Element 调用接口
  9. 简单的实现微信领取红包界面,按钮旋转动画效果。
  10. 计划总赶不上变化,优秀的项目经理该如何应对?