最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)愛心彈窗的完整教學(附源碼)

 更新時間:2026年04月02日 08:41:49   作者:鴿芷咕  
這篇文章主要為大家詳細介紹了Python實現(xiàn)愛心彈窗的特效,一段不到 40 行的 Python 代碼,在屏幕上依次綻放出愛心形狀的彈窗,每一條都是你想對 TA 說的話,有需要的小伙伴可以了解下

一段不到 40 行的 Python 代碼,在屏幕上依次綻放出愛心形狀的彈窗,每一條都是你想對 TA 說的話。

效果預覽

程序運行后會出現(xiàn)三個階段:

  • 愛心綻放 — 100 個小彈窗沿心形曲線依次彈出,每 0.03 秒一個,最終拼成一顆完整的愛心。
  • 滿屏暴擊 — 愛心消失后,彈窗鋪滿整個屏幕,每個窗口都是一句暖心的叮囑。
  • 溫柔收場 — 等待 10 秒后,所有彈窗在 1 秒內(nèi)優(yōu)雅地逐個關閉。

按下 空格鍵 可以隨時退出。

核心原理

1. 心形曲線公式

愛心形狀來自經(jīng)典的參數(shù)方程

  • x=16sin3(t)
  • y=13cos(t)5cos(2t)2cos(3t)cos(4t)

將參數(shù) t 從 0 到 2π 均勻取 100 個點,就能得到一個平滑的心形輪廓。然后將其縮放并居中到屏幕中央。

def heart_points(n, screen_w, screen_h):
    points = []
    for i in range(n):
        t = i / n * 2 * math.pi
        x = 16 * math.sin(t) ** 3
        y = 13 * math.cos(t) - 5 * math.cos(2*t) - 2 * math.cos(3*t) - math.cos(4*t)
        sx = int(screen_w/2 + x*20 - 50)   # 縮放 20 倍并居中
        sy = int(screen_h/2 - y*20 - 80)
        points.append((sx, sy))
    return points

2. 彈窗窗口

每個彈窗本質(zhì)上是一個 tk.Toplevel 小窗口:

def create_window(x, y, tip=None):
    win = tk.Toplevel()
    win.geometry(f"150x60+{x}+{y}")
    win.title("提示")
    win.attributes('-topmost', 1)          # 始終置頂
    text = tip or random.choice(tips)      # 隨機選取一句暖心話
    color = random.choice(colors)          # 隨機背景色
    tk.Label(win, text=text, bg=color,
             font=("微軟雅黑", 14), width=20, height=3).pack()
    return win
  • -topmost:確保彈窗始終在最前方。
  • 隨機文案:每次從預設列表中隨機抽取一條溫馨提醒。
  • 隨機配色:粉色、淺藍、淺綠等柔和色調(diào),視覺上溫馨可愛。

3. 三階段動畫流程

# 階段一:愛心綻放
for x, y in heart_points(100, sw, sh):
    win = create_window(x, y)
    hearts.append(win)
    root.update()
    time.sleep(0.03)

time.sleep(1)
# 銷毀愛心彈窗

# 階段二:滿屏暴擊
for _ in range(sw//150 * sh//40 + 50):
    x = random.randint(0, sw-150)
    y = random.randint(0, sh-60)
    win = create_window(x, y)
    all_windows.append(win)
    root.update()
    time.sleep(0.005)

time.sleep(10)

# 階段三:優(yōu)雅關閉
interval = 1.0 / len(all_windows)
for win in all_windows:
    win.destroy()
    root.update()
    time.sleep(interval)

完整代碼(可讀版)

import tkinter as tk, random, time, sys, math

hearts, all_wins = [], []
tips = ["多喝水利", "好好愛自己", "好好吃飯", "保持好心情",
        "我想你了", "順順利利", "別熬夜", "天涼了多穿衣服"]
colors = ["pink", "lightblue", "lightgreen", "lemonchiffon",
          "hotpink", "skyblue"]


def heart_points(n, screen_w, screen_h):
    """生成心形曲線上的 n 個屏幕坐標點"""
    points = []
    for i in range(n):
        t = i / n * 2 * math.pi
        x = 16 * math.sin(t) ** 3
        y = (13 * math.cos(t) - 5 * math.cos(2*t)
             - 2 * math.cos(3*t) - math.cos(4*t))
        sx = int(screen_w / 2 + x * 20 - 50)
        sy = int(screen_h / 2 - y * 20 - 80)
        sx = max(0, min(sx, screen_w - 150))
        sy = max(0, min(sy, screen_h - 60))
        points.append((sx, sy))
    return points


def create_popup(x, y, tip=None):
    """在指定位置創(chuàng)建一個彈窗"""
    win = tk.Toplevel()
    win.geometry(f"150x60+{x}+{y}")
    win.title("提示")
    win.attributes('-topmost', 1)
    text = tip or random.choice(tips)
    bg = random.choice(colors)
    tk.Label(win, text=text, bg=bg,
             font=("微軟雅黑", 14), width=20, height=3).pack()
    win.bind('<space>',
             lambda e: [w.destroy() for w in hearts + all_wins] or sys.exit())
    return win


def main():
    root = tk.Tk()
    root.withdraw()
    sw = root.winfo_screenwidth()
    sh = root.winfo_screenheight()

    # ---- 階段一:愛心綻放 ----
    points = heart_points(100, sw, sh)
    for i, (x, y) in enumerate(points):
        tip = "充實自己" if i == len(points) - 1 else None
        win = create_popup(x, y, tip)
        hearts.append(win)
        root.update()
        time.sleep(0.03)

    time.sleep(1)
    for w in hearts:
        if isinstance(w, tk.Toplevel) and w.winfo_exists():
            w.destroy()

    # ---- 階段二:滿屏暴擊 ----
    count = sw // 150 * sh // 40 + 50
    for _ in range(count):
        x = random.randint(0, sw - 150)
        y = random.randint(0, sh - 60)
        win = create_popup(x, y)
        all_wins.append(win)
        root.update()
        time.sleep(0.005)

    time.sleep(10)

    # ---- 階段三:優(yōu)雅關閉 ----
    interval = 1.0 / len(all_wins) if all_wins else 0
    for win in all_wins:
        if isinstance(win, tk.Toplevel) and win.winfo_exists():
            win.destroy()
        root.update()
        time.sleep(interval)

    root.mainloop()


if __name__ == "__main__":
    main()

自定義指南

修改文案

編輯 tips 列表即可替換彈窗中顯示的文字:

tips = ["自定義文案1", "自定義文案2", "..."]

修改配色

編輯 colors 列表,支持所有 Tkinter 認可的顏色名或十六進制值:

colors = ["#FFB6C1", "#87CEEB", "#DDA0DD", "#98FB98"]

調(diào)整愛心大小

修改 heart_points 函數(shù)中 x * 20y * 20 的縮放倍數(shù),數(shù)字越大愛心越大。

調(diào)整彈窗數(shù)量

  • 愛心彈窗數(shù):修改 heart_points(100, ...) 中的 100
  • 滿屏彈窗數(shù):修改 sw // 150 * sh // 40 + 50 中的公式

運行方式

確保已安裝 Python 3(自帶 tkinter),直接運行:

python 愛心彈窗.py

僅依賴 Python 標準庫,無需安裝任何第三方包。

小結(jié)

這個小程序用到的知識點:

知識點說明
tkinterPython 標準 GUI 庫
心形參數(shù)方程數(shù)學之美
time.sleep + update()手動實現(xiàn)逐幀動畫
random.choice隨機選取文案和顏色
-topmost 屬性窗口始終置頂

不到 40 行代碼,就能給 TA 一個小小的驚喜??烊ピ囋嚢?!

以上就是Python實現(xiàn)愛心彈窗的完整教學(附源碼)的詳細內(nèi)容,更多關于Python愛心彈窗的資料請關注腳本之家其它相關文章!

相關文章

  • Python實現(xiàn)GPU加速的基本操作

    Python實現(xiàn)GPU加速的基本操作

    本文簡單介紹了Python實現(xiàn)GPU加速的基本操作,文中運用大量代碼講解的非常詳細,有一定的參考價值,需要學習相關知識的小伙伴一起來看看吧
    2021-08-08
  • python刪除目錄的三種方法

    python刪除目錄的三種方法

    本文主要介紹了python刪除目錄的三種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-12-12
  • Flask WTForms 表單插件的使用

    Flask WTForms 表單插件的使用

    本文主要介紹了Flask WTForms表單插件的使用,Python的WTForms庫通過提供表單的結(jié)構(gòu)、驗證和渲染等功能,簡化了表單的處理流程,感興趣的可以了解一下
    2023-11-11
  • VS?Code中的Python代碼格式化插件示例講解

    VS?Code中的Python代碼格式化插件示例講解

    在Java開發(fā)過程中,代碼的規(guī)范性和可讀性至關重要,一個團隊中如果每個開發(fā)者的代碼風格各異,會給代碼的維護、審查和協(xié)作帶來極大的困難,這篇文章主要介紹了VS?Code中Python代碼格式化插件的相關資料,需要的朋友可以參考下,
    2025-11-11
  • 詳解Python中break語句的用法

    詳解Python中break語句的用法

    這篇文章主要介紹了詳解Python中break語句的用法,是Python入門的呼出知識,需要的朋友可以參考下
    2015-05-05
  • Python中第三方庫Requests庫的高級用法詳解

    Python中第三方庫Requests庫的高級用法詳解

    雖然Python的標準庫中urllib2模塊已經(jīng)包含了平常我們使用的大多數(shù)功能,但是它的API使用起來讓人實在感覺不好。它已經(jīng)不適合現(xiàn)在的時代,不適合現(xiàn)代的互聯(lián)網(wǎng)了。而Requests的誕生讓我們有了更好的選擇。本文就介紹了Python中第三方庫Requests庫的高級用法。
    2017-03-03
  • Python2實現(xiàn)的圖片文本識別功能詳解

    Python2實現(xiàn)的圖片文本識別功能詳解

    這篇文章主要介紹了Python2實現(xiàn)的圖片文本識別功能,結(jié)合實例形式分析了Python pytesser庫的安裝及使用pytesser庫識別圖片文字相關操作技巧,需要的朋友可以參考下
    2018-07-07
  • python redis 批量設置過期key過程解析

    python redis 批量設置過期key過程解析

    這篇文章主要介紹了python redis 批量設置過期key過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • python cv2 安裝步驟詳解

    python cv2 安裝步驟詳解

    文章介紹了Python中安裝OpenCV的兩種方法pip和conda,涵蓋不同版本(含GPU/額外模塊)的安裝命令,以及驗證安裝和注意事項(如更新工具、權(quán)限處理、推薦使用虛擬環(huán)境),感興趣的朋友一起看看吧
    2025-07-07
  • Python大數(shù)據(jù)之從網(wǎng)頁上爬取數(shù)據(jù)的方法詳解

    Python大數(shù)據(jù)之從網(wǎng)頁上爬取數(shù)據(jù)的方法詳解

    這篇文章主要介紹了Python大數(shù)據(jù)之從網(wǎng)頁上爬取數(shù)據(jù)的方法,結(jié)合實例形式詳細分析了Python爬蟲爬取網(wǎng)頁數(shù)據(jù)的相關操作技巧,需要的朋友可以參考下
    2019-11-11

最新評論

偏关县| 上饶市| 庆城县| 南通市| 南城县| 玉环县| 土默特左旗| 镇沅| 来凤县| 临颍县| 兰坪| 遵化市| 凤阳县| 北碚区| 东台市| 嘉祥县| 宝丰县| 江孜县| 额济纳旗| 寿光市| 南投市| 屏东县| 辽阳县| 绩溪县| 重庆市| 崇信县| 峨山| 毕节市| 梧州市| 鹤壁市| 荔浦县| 淳安县| 临海市| 岚皋县| 墨江| 宁城县| 千阳县| 华池县| 合阳县| 衡阳县| 临汾市|