跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

Python 实现屏幕爱心弹窗效果

Python 脚本利用 tkinter 库在屏幕上生成动态爱心弹窗效果。通过心形参数方程计算坐标,分阶段展示爱心形成与全屏覆盖动画,并随机显示温馨话语。支持自定义提示语、窗口大小及持续时间。需注意大量弹窗可能占用系统资源,建议在空闲时段运行。适用于表达情感或趣味演示,包含环境配置、运行步骤及常见故障排查指南。

极客工坊发布于 2025/11/18更新于 2026/6/522 浏览
Python 实现屏幕爱心弹窗效果

Python 实现屏幕爱心弹窗效果

这是一个用 Python 编写的趣味脚本,利用 tkinter 库在屏幕上生成动态爱心弹窗。程序会先在屏幕中央形成爱心图案,随后在全屏随机显示带有温馨话语的彩色窗口,最后自动关闭。

环境要求

运行此脚本需要以下基础环境:

  • 操作系统:Windows 10/11、macOS 10.14+ 或 Linux(需图形界面)
  • Python 版本:Python 3.x
  • 依赖库:tkinter(通常随 Python 安装,无需额外 pip install)
  • 硬件:建议至少 2GB 可用内存,支持任意分辨率显示器

检查 Python 安装

打开命令行或终端,输入以下命令确认版本:

python --version

若显示 Python 3.x 版本号,说明环境已就绪。

核心代码

将以下代码保存为 love.py。注意导入语句已分行整理,确保缩进正确。

import random
import tkinter as tk
import threading
import math
import time

# 温馨提示语列表
tips = [
    "我想你了", "别熬夜哦", "要开心呀", "我爱你",
    "早点休息", "记得吃饭", "多喝热水", "你最棒啦",
    "晚安好梦", "I LOVE YOU", "照顾好自己", "想见到你",
    "一直在等你", "别太累了"
]

# 自动获取屏幕分辨率
try:
    root_temp = tk.Tk()
    SCREEN_W = root_temp.winfo_screenwidth()
    SCREEN_H = root_temp.winfo_screenheight()
    root_temp.destroy()
except:
    SCREEN_W = 1920
    SCREEN_H = 1080

# 弹窗尺寸
WINDOW_W = 120
WINDOW_H = 60

# 存储所有窗口引用
all_windows = []

 ():
    
    points = []
     t  (num_points):
        t_rad = t / num_points *  * math.pi
        
        x =  * (math.sin(t_rad) ** )
        y =  * math.cos(t_rad) -  * math.cos( * t_rad) -  * math.cos( * t_rad) - math.cos( * t_rad)
        
        screen_x = SCREEN_W //  + x * 
        screen_y = SCREEN_H //  - y * 
        
        screen_x = (WINDOW_W // , (screen_x, SCREEN_W - WINDOW_W // ))
        screen_y = (WINDOW_H // , (screen_y, SCREEN_H - WINDOW_H // ))
        points.append(((screen_x - WINDOW_W // ), (screen_y - WINDOW_H // )))
     points

 ():
    
    root = tk.Tk()
    root.overrideredirect()
    root.attributes(, )
    
    r = random.randint(, )
    g = random.randint(, )
    b = random.randint(, )
    root.configure(bg=)
    tip = random.choice(tips)
    label = tk.Label(root, text=tip, font=(, , ), bg=, fg=, wraplength=WINDOW_W-)
    label.pack(fill=tk.BOTH, expand=, padx=, pady=)
    root.geometry()
    all_windows.append(root)
    
    root.after(, root.destroy)
    
    root.mainloop()

 ():
    
    root = tk.Tk()
    root.overrideredirect()
    root.attributes(, )
    
    r = random.randint(, )
    g = random.randint(, )
    b = random.randint(, )
    root.configure(bg=)
    tip = random.choice(tips)
    label = tk.Label(root, text=tip, font=(, , ), bg=, fg=, wraplength=WINDOW_W-)
    label.pack(fill=tk.BOTH, expand=, padx=, pady=)
    
    x = random.randint(, SCREEN_W - WINDOW_W)
    y = random.randint(, SCREEN_H - WINDOW_H)
    root.geometry()
    all_windows.append(root)
    
    root.after(, root.destroy)
    
    root.mainloop()

 ():
    
    
    cols = (SCREEN_W // WINDOW_W) + 
    rows = (SCREEN_H // WINDOW_H) + 
    total_windows = cols * rows
    ()
    threads = []
     i  (total_windows):
        t = threading.Thread(target=create_random_window)
        threads.append(t)
        t.start()
        
         i %  == :
            time.sleep()

 ():
    
    
    heart_points = generate_heart_points()
    ()
    
    threads = []
     i, (x, y)  (heart_points):
        t = threading.Thread(target=show_heart_window, args=(x, y))
        threads.append(t)
        t.start()
        time.sleep()  
    
    time.sleep()
    
    center_x = SCREEN_W //  - WINDOW_W // 
    center_y = SCREEN_H //  - WINDOW_H // 
    ()
    
    fullscreen_thread = threading.Thread(target=create_fullscreen_windows)
    fullscreen_thread.start()

 __name__ == :
    
    animation_thread = threading.Thread(target=heart_animation)
    animation_thread.start()
    
    :
         :
            time.sleep()
     KeyboardInterrupt:
        ()
        
         window  all_windows:
            :
                window.destroy()
            :
                
def
generate_heart_points
num_points=80
"""生成心形轨迹坐标"""
for
in
range
2
# 心形参数方程
16
3
13
5
2
2
3
4
# 映射到屏幕坐标
2
15
2
15
# 边界校验
max
2
min
2
max
2
min
2
int
2
int
2
return
def
show_heart_window
x, y
"""创建心形弹窗"""
True
"-topmost"
True
# 心形窗口使用红色系
200
255
100
150
100
150
f'#{r:02x}{g:02x}{b:02x}'
"微软雅黑"
10
"bold"
f'#{r:02x}{g:02x}{b:02x}'
'white'
10
True
5
5
f"{WINDOW_W}x{WINDOW_H}+{x}+{y}"
# 60 秒后自动关闭窗口
60000
# 启动主循环
def
create_random_window
"""创建随机位置的弹窗,30 秒后关闭"""
True
"-topmost"
True
# 随机颜色
55
255
55
255
55
255
f'#{r:02x}{g:02x}{b:02x}'
"微软雅黑"
10
"bold"
f'#{r:02x}{g:02x}{b:02x}'
'white'
10
True
5
5
# 随机位置
0
0
f"{WINDOW_W}x{WINDOW_H}+{x}+{y}"
# 60 秒后自动关闭窗口
60000
# 启动主循环
def
create_fullscreen_windows
"""创建覆盖全屏的弹窗"""
# 计算需要多少个弹窗来覆盖屏幕
7
7
print
f"正在创建 {total_windows} 个弹窗覆盖屏幕..."
for
in
range
# 控制创建速度,避免系统卡顿
if
10
0
0.1
def
heart_animation
"""心形弹窗动画"""
# 生成心形位置
60
print
"正在逐步显示心形弹窗..."
# 逐步创建心形弹窗
for
in
enumerate
0.08
# 逐步显示的间隔
# 等待心形显示完成
2
# 计算中央位置
2
2
2
2
print
"开始满屏弹窗..."
# 开始满屏弹窗
if
"__main__"
# 启动心形动画
# 保持程序运行
try
while
True
1
except
print
"程序结束"
# 关闭所有窗口
for
in
try
except
pass

运行步骤

方法一:命令行运行(推荐)

  1. 打开命令行或终端。
  2. 进入程序所在目录:
    cd /path/to/your/file
    
  3. 运行程序:
    python love.py
    

方法二:使用 Python IDE

  1. 打开 PyCharm、VSCode 等开发环境。
  2. 打开 love.py 文件。
  3. 点击运行按钮或按 F5。

自定义设置

代码中预留了多个变量,方便调整体验:

  • 修改温馨话语:编辑 tips 列表,添加你想说的话。
  • 调整弹窗大小:修改变量 WINDOW_W(宽)和 WINDOW_H(高)。
  • 改变显示时间:修改 root.after(60000, ...) 中的数值(单位毫秒),例如改为 30000 即 30 秒关闭。
  • 调整爱心大小:修改心形缩放比例,如 x * 15 中的系数。
  • 改变显示速度:调整 time.sleep(0.08) 中的数值,越小越快。

故障排除

问题 1:提示 "python 不是内部或外部命令"

  • 检查 Python 是否安装成功。
  • 尝试使用 python3 命令。
  • 或将 Python 添加到系统环境变量 PATH 中。

问题 2:提示 "No module named 'tkinter'"

  • Windows:重新安装 Python,安装时勾选 "tcl/tk and IDLE"。
  • macOS:安装最新版 Python。
  • Linux:安装 tkinter 包,例如:
    sudo apt-get install python3-tk
    

问题 3:程序卡死无响应

  • 使用强制退出方法(见下文)。
  • 重启电脑(如无法正常退出)。

问题 4:弹窗显示位置不正确

  • 程序会自动检测屏幕分辨率。
  • 如检测失败,手动修改代码中的分辨率常量:
    SCREEN_W = 1920  # 你的屏幕宽度
    SCREEN_H = 1080  # 你的屏幕高度
    

⚠️ 重要警告

由于程序会创建大量窗口,请注意以下影响:

  • 性能影响:可能导致系统暂时卡顿、内存占用增加、CPU 使用率升高。
  • 使用影响:运行期间难以进行其他操作,可能覆盖全屏应用程序。

建议:

  • ✅ 在不需要使用电脑时运行。
  • ✅ 提前保存所有工作文档。
  • ✅ 关闭重要应用程序。
  • ❌ 不要在工作会议期间运行。
  • ❌ 不要在玩游戏或处理重要任务时运行。

停止程序

正常退出

等待所有弹窗自动关闭(约 60 秒)。

强制退出方法

  1. 键盘快捷键:在命令行窗口中按 Ctrl + C。
  2. 任务管理器(Windows):按 Ctrl + Shift + Esc,找到 Python 进程,右键选择'结束任务'。
  3. 活动监视器(macOS):按 Command + Space,搜索'活动监视器',找到 Python 进程,点击'×'按钮。
  4. 系统监视器(Linux):按 Ctrl + Alt + Delete 或搜索'系统监视器',找到 python 进程,选择'结束进程'。

注:此程序旨在创造浪漫惊喜,请确保在合适的时机和环境下使用,避免影响重要工作或活动。

目录

  1. Python 实现屏幕爱心弹窗效果
  2. 环境要求
  3. 检查 Python 安装
  4. 核心代码
  5. 温馨提示语列表
  6. 自动获取屏幕分辨率
  7. 弹窗尺寸
  8. 存储所有窗口引用
  9. 运行步骤
  10. 方法一:命令行运行(推荐)
  11. 方法二:使用 Python IDE
  12. 自定义设置
  13. 故障排除
  14. 问题 1:提示 "python 不是内部或外部命令"
  15. 问题 2:提示 "No module named 'tkinter'"
  16. 问题 3:程序卡死无响应
  17. 问题 4:弹窗显示位置不正确
  18. ⚠️ 重要警告
  19. 停止程序
  20. 正常退出
  21. 强制退出方法
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 基于 Ollama 与 AnythingLLM 搭建本地 RAG 知识库
  • 前端网页开发基础:HTML、CSS 与 JavaScript 入门教程
  • Spring Boot 响应式 Web 与传统 MVC:原理区别与适用场景
  • C++ unordered_set 和 unordered_map 原理及哈希表模拟实现
  • Git 与 TortoiseGit 安装及使用教程
  • 自然语言处理在教育领域的应用与实战
  • Stable Diffusion 镜像交付标准:Dockerfile 透明与构建可追溯
  • Android 端 Whisper 离线语音识别实现指南
  • DSP + FPGA 控制步进电机原理与代码实现
  • STL 标准模板库 string 类详解
  • MATLAB Copilot_AI 工具箱:对接多款 AI 大模型辅助编程
  • OpenAI 发布最强推理模型 o1,性能超越人类专家
  • AI 无人机智慧巡检平台架构与功能解析
  • VSCode GitHub Copilot 插件无法加载模型解决方案
  • Formality 原语(primitive)概念解析
  • Git 配置与使用详解
  • OpenClaw WebSocket 通道开发:从零构建自定义 AI 通信
  • macOS HBuilderX 运行 uniapp 报错缺少 Node.js 环境解决方案
  • MATLAB 智能代码生成工具 Copilot_AI 功能介绍
  • Python 3.12.0 安装与配置完整指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online