当前位置:首页>python>Python实现放烟花效果

Python实现放烟花效果

  • 2026-10-22 21:28:39
Python实现放烟花效果

🎆效果图

《绚丽烟花小宇宙》代码全解析——让 tkinter 在夜空里放一场价值 3 000 字的烟火秀

“嘿,老板不发年终奖?没关系!今天用 300 行 Python 给自己放一场沉浸式烟花——自带姓名表白、5 种爆炸形态、还能一键截图当壁纸。零音响、零污染、零成本,tkinter 版‘赛博烟花’ 让你在公司电脑也能浪漫到飞起!”


📚阅读地图(条理有序,层级分明)

  1. 开场白(已奉上)
  2. 全景速览:项目结构 & 运行效果
  3. 六大核心模块逐行拆解① 程序入口 & 主窗口搭建② 数据仓库:烟花/爆炸/火花三大列表③ 随机颜色工厂:HSV→RGB→十六进制④ 发射控制:烟花弹道与尾迹⑤ 爆炸时刻:5 种粒子算法与重力模拟⑥ 动画引擎:33 FPS 与异常兜底⑦ 彩蛋功能:姓名闪烁 + 截图保存
  4. 知识点汇总 & 学习目标
  5. 拓展思路:音乐同步、多屏投屏、Web 化

2️⃣ 全景速览

fireworks/├─ main.py          # 单文件即可运行└─ requirements.txt # 仅 2 行:tkinter(内置)+ pillow(可选)

运行效果:

  • 1200×800 黑幕画布,烟花每 0.5 s 随机发射;
  • 支持 混合/星形/圆形/散花/瀑布 5 种爆炸形态;
  • 输入姓名→爆炸瞬间屏幕中央 3 秒彩色闪烁;
  • 点击 保存 自动生成 fireworks_年月日_时分秒.png。

3️⃣ 六大核心模块逐行拆解

① 程序入口 & 主窗口搭建

if __name__ == "__main__":    root = tk.Tk()    app = EnhancedFireworks(root)    root.mainloop()

层级解析

  • 标准 tkinter 启动三句半:实例化 Tk→传入自定义类→主事件循环。
  • EnhancedFireworks 是 上帝类,负责“画布+逻辑+数据”一站式管理,下文全部围绕它展开。

② 数据仓库:三大列表 & 控制变量

self.fireworks = []   # 上升阶段的发射体self.explosions = []  # 爆炸后的粒子群self.sparks = []      # 中心闪光锦上添花self.running = False# 总开关self.paused = False# 暂停旗

层级解析

  • 列表当数据库:内存级,清空即消失;
  • 布尔旗做状态机:running 负责“生死”,paused 负责“冻帧”;
  • 命名语义化:一眼区分“上升”“爆炸”“闪光”三个阶段。

③ 随机颜色工厂:HSV→RGB→十六进制

defget_random_color(self):    hue = random.random()    saturation = 0.8 + random.random() * 0.2    value = 0.8 + random.random() * 0.2    r, g, b = colorsys.hsv_to_rgb(hue, saturation, value)return"#{:02x}{:02x}{:02x}".format(int(r*255), int(g*255), int(b*255))

层级解析

  • HSV 空间:先保证“鲜艳”,再转 RGB 供 tkinter 使用;
  • 饱和度 0.8~1.0、明度 0.8~1.0 → 杜绝灰蒙蒙;
  • 一行 return 完成浮点→整型→十六进制拼接,简洁高效。

④ 发射控制:烟花弹道与尾迹

defcreate_firework(self):    x = random.randint(100, self.canvas.winfo_width()-100)    color = self.get_random_color()    velocity = random.uniform(6, 12)    target_y = random.randint(150, self.canvas.winfo_height()//2)    firework = {"x": x, "y": self.canvas.winfo_height(),"radius": random.randint(2, 4),"color": color, "velocity": velocity,"gravity": 0.15 + random.random()*0.1,"target_y": target_y,"trail": [],"id": self.canvas.create_oval(...)    }    self.fireworks.append(firework)

层级解析

  • 初始 y 固定在画布底部,target_y 随机 1/2 上方→模拟“升空”;
  • velocity 向上递减,gravity 向下递增,到达目标或速度为负即爆炸;
  • trail 列表 记录尾迹粒子,70 % 概率生成半透明小圆点,营造拖尾。

⑤ 爆炸时刻:5 种粒子算法与重力模拟

defexplode(self, x, y, color):    explosion_type = self.firework_type.get()    ...for _ in range(particle_count):        angle = random.choice(angles) + random.uniform(-0.2, 0.2) if angles else random.uniform(0, 2*math.pi)        speed = random.uniform(2, 5) if explosion_type == "瀑布"else random.uniform(1, 6)        gravity = random.uniform(0.1, 0.3) if explosion_type == "瀑布"else random.uniform(0.03, 0.15)        particle = {"vx": speed * math.cos(angle),"vy": speed * math.sin(angle),"gravity": gravity,"alpha": 1.0,"decay": random.uniform(0.015, 0.04),            ...        }

层级解析

  • 粒子数量:瀑布 120~180,星形 80~120,动态差异明显;
  • 角度策略:星形预置 12 方向±噪声,圆形/散花完全随机;
  • 重力系数:瀑布 0.1~0.3,粒子“唰”地下坠;其余 0.03~0.15,轻盈飘散;
  • 颜色彩蛋:30 % 概率取互补色,70 % 附近相似色,爆炸更绚丽。

⑥ 动画引擎:33 FPS 与异常兜底

defanimate(self):try:        self.update_fireworks()except Exception as e:        print(f"动画更新错误: {e}")    self.root.after(30, self.animate)  # 约33FPS

层级解析

  • root.after(30, ...) 递归调度,30 ms ≈ 33 帧/秒,流畅不卡顿;
  • try/except 捕获“画布已销毁”等运行时异常,防止整程序崩溃;
  • update_fireworks() 内部分三大阶段:更新发射体→更新爆炸→更新火花,顺序执行,层级清晰。

⑦ 彩蛋功能:姓名闪烁 + 截图保存

defupdate_name_display(self):    ...    size = max(20, 40 - int(elapsed * 4))    color = self.get_random_color()    self.canvas.create_text(x+1, y+1, text=self.name, font=("SimHei", size, "bold"), fill="#000", tags="name_text")    self.canvas.create_text(x, y, text=self.name, font=("SimHei", size, "bold"), fill=color, tags="name_text")defsave_canvas(self):    ps = self.canvas.postscript(colormode='color')    img = Image.open(io.BytesIO(ps.encode('utf-8')))    filename = f"fireworks_{time.strftime('%Y%m%d_%H%M%S')}.png"    img.save(filename, "png")

层级解析

  • 姓名 3 秒闪烁:字体尺寸随时间线性缩小,透明度 alpha = 1 - elapsed/5;
  • 双层文字:黑色右下偏移 1 px 做阴影,彩色本体居中,立体感瞬间拉满;
  • 截图原理:tkinter 内置 postscript 矢量导出→PIL 读取→PNG 保存,无需 win32api 也能跨平台。

4️⃣ 知识点汇总 & 学习目标

层级
知识点
目标达成
GUI 框架
tkinter Canvas、事件循环、after 调度
用内置库做出 60 帧动画
颜色理论
HSV 空间、互补色、相似色计算
让烟花“靓”而不“花”
运动学
速度、重力、角度分解、衰减系数
物理引擎入门级实现
面向对象
上帝类封装、字典当结构体、列表当仓库
快速原型开发思维
异常防御
try/except 兜底、运行时日志
提升程序健壮性
扩展生态
Pillow 矢量转 PNG、PostScript 应用
打通“截图”最后一公里

5️⃣ 拓展思路(一句话启发)

  1. 音乐同步:用 pyaudio 解析节拍,重载 firework_interval 实现“鼓点发射”;
  2. 多屏投屏:tk.Toplevel 多窗口,把主画布拖到副屏,演唱会现场 GET;
  3. Web 化:借助 pyscript 或 skulpt 把 tkinter 移植到浏览器,朋友圈直接扫码看烟花;
  4. 粒子升级:引入 numpy 矢量化计算,10 万粒子也不卡;
  5. 真实商业:打包成 .exe 求婚神器,“输入她名字,烟花+截图+戒指弹窗” 一条龙服务。

全文 3 000+ 字,从一行 tk.Tk() 到 5 种爆炸形态,再到截图保存,层级清晰、注释密集、物理+颜色+GUI 三修。复制代码跑一把,今晚就让 Python 给你放一场不会结束的烟火!

点击【关注+收藏】获取最新的实战代码案例

Python 20天的学习计划

Python的 7 天 学习计划

Python实现类似postman调用

Python实现局域网文件共享神器

Python实现在线书法生成器

Python实现叶子雕刻图

Python证件照多尺寸生成器

Python实现人像证件照背景替换

Python开发自定义打包exe程序

Python实现印章生成器

Python实现简易房租汇总计算器

Python实现哪吒打字打气球

Python实现批量生产证书工厂

Python一键生成带印章的word请假条

Python快捷ps图片取色等编辑器

Python实现批量生产证书工厂

Python快捷ps图片取色等编辑器

Python实现自定义取色器

Python实现自动变成温柔水彩素描

Python实现创意画板代码

用Python打造汉字笔画查询工具:从GUI界面到笔顺动画实现

Python实现表情包制作器

Python实现中国象棋小游戏

Python实现印章生成器

Python模拟实现金山打字通

Python超实用 Markdown 转富文本神器 —— 代码全解析

Python实现贪吃蛇小游戏源码解析

Python实现二维码生成

Python实现视频播放器

Python实现印章生成器

Python实现在线印章制作

Python+Ai实现一个简单的智能语音小助手

Python实现简单记事本

Python实现Markdown转HTML工具代码

Python实现创意画板代码

Python实现简易图画工具代码

Python实现视频播放器

Python实现简单记事本

Python 实现连连看游戏代码解析

Python实现简单电脑进程管理器

Python一个超实用的工具-词频统计工具

Python简易爬虫天气工具

Python定时任务提醒工具

Python《猜数字游戏代码解析》

Python《简易计算器代码解析》

Python+Ai在线文档生成小助手

Python 《密码生成器代码解析》

Python|+Ai实现一个简单的智能语音小助手

Python实现简易图画工具代码

Python实现Markdown转Html

Python实现视频播放器

Python 实现连连看游戏代码解析

Python实现火山AI调用生成故事

Python实现豆包Ai调用生成故事

Python实现简单记事本

Python实现简单电脑进程管理器

【实战1】

  1. Python:生成二维码生成器

  2. Python-pgame实现迷宫

  3. Python-实现天气时钟小助手

  4. Python-QrCode实现各种二维码

  5. Python-pyglet实现鸿蒙时钟

  6. Python-pickle解析获取微信好友信息

  7. Python-wxPy初版实现微信消息轰炸

  8. Python实现八卦星空时钟

  9. Python实现国庆红旗头像效果

  10. Python-PIL实现图片上指定位置添加图标识

【实战2】

  1. Python-wxPy初版实现微信消息轰炸

  2. Python-PIL库Image类解析

  3. Python-tlinter实现简单学生管理系统

  4. Python-itChat实现微信消息推发

  5. Python实现Pdf转Word

  6. Python-实现自动生成对联小助手

  7. Py2Exe另外一种方式的打包

  8. Python-tts生成语音转换小助手

  9. python-win32等实现exe自动添加到电脑自启动选项

  10. python实现桌面录制视频

  11. PySimpleGUI-checkboxPython实现图片截取成九宫格

  12. python打包成exe文件

  13. Python-faker生成虚拟数据

  14. python实现播放器Python-FastApi简单实现

  15. python爬取豆瓣电影影评

  16. Python 爬取公众号文章集合

【实战3】

  1. python实现简易飞花令

  2. python-获取图猜成语的图片

  3. python-menu菜单实现

  4. Python-pySimpleGUI实现界面

  5. Python-彩色图片转换白描

  6. Python-moviepy-实现音视频播放器

  7. Python操作SQLite数据库

  8. Python-PySimpleGUI实现菜单

  9. python-Tkinter实现个性签名

  10. Python-WordCloud云词图

  11. Python-customTkinter的使用

  12. Python-tkinter(下)

  13. Python-tkinter(中)

  14. python-tkinter(1)

  15. Python实现视频小助手

【实战4】

  1. Python实现视频小助手

  2. Python-flask-1:搭建主页面

  3. Python之tttkbootstrap界面

  4. python-PyQt5实现图片显示和简易阅读器

  5. 在Pycharm上配置Qt Designer 及 Pyuic

  6. Python之PIL实现一寸二寸等图片的裁剪和生成

  7. Python爬取金山词典查询结果

  8. python实现生成个性二维码

  9. AI人机对战版五子棋游戏(AI+pygame实现)

  10. python实现垃圾分类查询器

  11. python-实现菜单menu

  12. Python 领域运用之:自动化测试

  13. Python 领域运用:Web 开发

  14. Python 领域运用:自动化运维

最新文章

随机文章