基于python實(shí)現(xiàn)新春煙花盛宴效果
效果預(yù)覽
環(huán)境需求
- python3.11.4及以上
- PyCharm Community Edition 2023.2.5
- pyinstaller6.2.0(可選,這個(gè)庫用于打包,使程序沒有python環(huán)境也可以運(yùn)行,如果想發(fā)給好朋友的話需要這個(gè)庫哦~)
【注】
- python環(huán)境搭建請(qǐng)見:最新python下載安裝及環(huán)境搭建教程_python_腳本之家 (jb51.net)
- pyinstaller使用教程見:將python代碼打包成.exe文件直接運(yùn)行的具體步驟_python_腳本之家 (jb51.net)
新春煙花
程序設(shè)計(jì)
# 導(dǎo)入必要的庫 import tkinter # 導(dǎo)入tkinter庫用于GUI import random # 導(dǎo)入random庫用于生成隨機(jī)數(shù) # 函數(shù):將窗口居中顯示 def center_window(window, width, height): screen_width = window.winfo_screenwidth() screen_height = window.winfo_screenheight() x = (screen_width - width) // 2 y = (screen_height - height) // 2 window.geometry(f'{width}x{height}+{x}+{y}') # 設(shè)置窗口的位置和大小 # 函數(shù):生成隨機(jī)顏色 def color(): r = random.randint(0, 255) g = random.randint(0, 255) b = random.randint(0, 255) return f'#{r:02x}{g:02x}{b:02x}' # 返回隨機(jī)顏色值的字符串表示 # 創(chuàng)建主窗口 root = tkinter.Tk() # 創(chuàng)建主窗口對(duì)象 root.title("新春煙花") # 設(shè)置窗口標(biāo)題 width = 888 height = 666 center_window(root, width, height) # 調(diào)用center_window函數(shù)將窗口居中顯示 # 創(chuàng)建畫布 canvas = tkinter.Canvas(root, bg='black') # 創(chuàng)建畫布對(duì)象,背景色為黑色 canvas.pack(fill=tkinter.BOTH, expand=1) # 將畫布填滿整個(gè)窗口并擴(kuò)展 # 鼠標(biāo)點(diǎn)擊事件處理函數(shù) def on_click(event): x = event.x y = event.y firework = Firework(canvas, x, y) # 創(chuàng)建Firework對(duì)象 firework.fire() # 發(fā)射煙花 # 綁定鼠標(biāo)點(diǎn)擊事件 canvas.bind('<Button-1>', on_click) # 運(yùn)行主循環(huán) root.mainloop() # 啟動(dòng)主循環(huán),等待用戶交互事件 ……(完整代碼見文末系列文章哦)
程序分析
這段代碼是使用Python的Tkinter庫創(chuàng)建的一個(gè)簡單GUI應(yīng)用程序,模擬了新春煙花的效果。程序的主要功能是在用戶點(diǎn)擊畫布時(shí),在鼠標(biāo)點(diǎn)擊的位置生成并動(dòng)態(tài)展示煙花效果。
代碼結(jié)構(gòu)與功能概述:
1. 導(dǎo)入所需的庫:
- `tkinter`:用于構(gòu)建圖形用戶界面(GUI)的基礎(chǔ)庫。
- `random`:用于生成隨機(jī)數(shù)以實(shí)現(xiàn)不同顏色和粒子運(yùn)動(dòng)軌跡的變化。
2. 定義輔助函數(shù):
- `center_window(window, width, height)`:接受窗口對(duì)象、寬度和高度參數(shù),計(jì)算窗口在屏幕上的居中坐標(biāo),并設(shè)置窗口大小和位置。
3. 定義一個(gè)生成隨機(jī)顏色的方法 `color()`,返回一個(gè)隨機(jī)RGB值表示的顏色字符串。
4. 定義了一個(gè)名為`Firework`的類,其包含以下方法:
- `__init__(self, canvas, x, y)`:初始化煙花對(duì)象,包括畫布引用、初始坐標(biāo)、隨機(jī)顏色以及煙花粒子列表。
- `create_particles(self)`:為煙花生成一定數(shù)量(99個(gè))的隨機(jī)速度的粒子,每個(gè)粒子用橢圓表示,并存儲(chǔ)粒子ID及其速度信息。
- `update(self)`:更新煙花狀態(tài),增加粒子半徑、減少壽命,并根據(jù)粒子速度移動(dòng)粒子,移除超出畫布范圍的粒子。
- `fire(self)`:在畫布上繪制出煙花主體,并啟動(dòng)定時(shí)器調(diào)用`launch`方法開始連續(xù)更新煙花狀態(tài)。
- `launch(self)`:連續(xù)執(zhí)行`update`方法,當(dāng)所有粒子消失或煙花壽命結(jié)束時(shí)從畫布上刪除煙花。
5. 創(chuàng)建主窗口`root`,設(shè)置標(biāo)題和窗口尺寸,并調(diào)用`center_window`將其居中顯示。
6. 在窗口內(nèi)創(chuàng)建一個(gè)黑色背景的畫布,并將畫布填滿整個(gè)窗口。
7. 定義鼠標(biāo)點(diǎn)擊事件處理函數(shù)`on_click(event)`,在鼠標(biāo)左鍵點(diǎn)擊時(shí),根據(jù)點(diǎn)擊坐標(biāo)創(chuàng)建一個(gè)`Firework`實(shí)例并發(fā)射煙花。
8. 將鼠標(biāo)點(diǎn)擊事件綁定到畫布上。
9. 最后運(yùn)行主循環(huán)`root.mainloop()`,持續(xù)監(jiān)聽用戶交互和GUI事件,直到窗口被關(guān)閉。
通過這個(gè)程序,用戶可以在畫布上任意位置點(diǎn)擊來觸發(fā)煙花動(dòng)畫,每朵煙花由多個(gè)隨機(jī)顏色和方向的粒子組成,粒子會(huì)按照設(shè)定的速度在畫布上移動(dòng),逐漸擴(kuò)散并最終消失,從而模擬出真實(shí)的煙花綻放和消散的效果。
運(yùn)行結(jié)果
寫在最后
到此這篇關(guān)于基于python實(shí)現(xiàn)新春煙花盛宴效果的文章就介紹到這了,更多相關(guān)python新春煙花效果內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)socket簡單通信的示例代碼
這篇文章主要介紹了python實(shí)現(xiàn)socket簡單通信的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04python3實(shí)現(xiàn)點(diǎn)餐系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python3實(shí)現(xiàn)點(diǎn)餐系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01Pytorch中如何調(diào)用forward()函數(shù)
這篇文章主要介紹了Pytorch中如何調(diào)用forward()函數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02python運(yùn)算符+條件結(jié)構(gòu)+循環(huán)結(jié)構(gòu)
這篇文章主要介紹了python運(yùn)算符、條件結(jié)構(gòu)、循環(huán)結(jié)構(gòu);算術(shù)運(yùn)算符、賦值運(yùn)算符、邏輯運(yùn)算符等一些相關(guān)內(nèi)容,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助2022-03-03Python對(duì)130w+張圖片檢索的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于Python對(duì)130w+張圖片檢索的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03