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

看一下效果:

源码已经打包整理好了,有需要的可以在下方公众号Python数据分析之美后台回复fw获取。

Python带你跨年!用Python送你一场跨年烟花秀相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. 【跨年首秀】Python浪漫烟花秀带你完美结局2022

    2022 已经接近尾声了,2023 即将到来,快来用 Python 制作一场跨年烟花秀吧. 需要用到的 Python 模块包括:tkinter.PIL.time.random.math,如果第三方模块 ...

  8. Python Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样实现最方便呢?我这里推荐大家使用GoEasy,它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持we ...

  9. python开发教程视频教程_金牌大神讲师Alex带你学Python 153节课带你轻松学透Python开发视频教程_IT教程网...

    (1)\第一章:目录中文件数:29个 ├─01课程介绍(一).mp4 ├─02课程介绍(二)-Python与其他语言的区别.mp4 ├─03课程介绍(三)-Python生态圈.mp4 ├─04课程介绍 ...

最新文章

  1. 设计模式之工厂方法模式(Factory Method)摘录
  2. wordcount代码_通过腾讯云 Serverless Regsitry 快速开发与部署一个 WordCount 实例
  3. 10个你必须知道的Python内置函数
  4. Qt 事件处理机制-qt源码解读
  5. kylinH5框架之项目组件理解
  6. Keras 深度学习框架中文文档
  7. 国内手机产业混乱:产业一窝蜂 企业捞快钱
  8. 【Java】八进制那些事
  9. sql backup database备份d盘_Oracle-备份与恢复(二)RMAN备份-自动备份计划任务脚本...
  10. oracle中的代码在那里写,oracle中如何编写树级代码-数据库专栏,ORACLE
  11. CAM如何转换为PCB
  12. 虚拟机服务器渗透,对一台虚拟主机服务器的渗透 -电脑资料
  13. 李沐-动手学习深度学习v2
  14. 二叉树遍历方式-先序、中序、后序和层序遍历(JAVA)
  15. Java8新特性-使用Stream流来实现递归遍历树形结构(案例)
  16. python教程40G,从入门到精通免费领取
  17. 人机融合智能的新思考
  18. 2018-2019-2 20165316 《网络对抗技术》 Exp6 信息搜集与漏洞扫描
  19. 温湿度雨雪复合传感器
  20. 协众信息ui设计岗位招聘要求有哪些?

热门文章

  1. C#项目中,使用应用程序清单文件 app.manifest 实现获得管理员权限等功能
  2. 利用zram-swap使树莓派ZERO 2W性能提升
  3. Python咖啡图片
  4. 评级:Lambda存储领域新贵,热度与争议并行
  5. 【Markdown常用语法】
  6. Nginx 提升网站访问速度
  7. 浅析渲染引擎与前端优化
  8. 怎样才能动态演示直线与平面所成的角
  9. 客户视频|申银万国期货金老师:选择ZStack,省钱省力又安心
  10. 20172266 遥感一班 李安娜第六次笔记