利用Python在万圣节实现比心弹窗告白代码

 更新时间:2025年11月28日 11:43:55   作者:一起养小猫  
这篇文章主要介绍了关于利用Python在万圣节实现比心弹窗告白代码的相关资料,每个弹窗会显示一条温馨提示,程序通过参数方程绘制爱心形状,并使用多线程技术实现动态效果,需要的朋友可以参考下

前言

万圣节到了,大家都在准备各种恐怖主题的代码和项目。但我觉得,节日除了惊悚和刺激,也可以有温暖和惊喜!今天我就带大家制作一个会在屏幕上显示爱心形状的温馨弹窗程序。每个弹窗都会显示一条暖心提示,非常适合在节日里给朋友一个小惊喜!

效果预览

运行程序后,你的屏幕上会出现由多个小窗口组成的爱心形状,每个窗口都会显示不同的温馨提示,比如"顺顺利利"、"早点休息"等。窗口会按照爱心的轮廓逐渐显示,形成一个动态的爱心效果!我先把代码放在下面,需要可以自取。

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

def heart_x(t, size=10):
    return size * 16 * (math.sin(t) ** 3)


def heart_y(t, size=10):
    return -size * (13 * math.cos(t) - 5 * math.cos(2 * t) - 2 * math.cos(3 * t) - math.cos(4 * t))


def show_warm_tip(x, y, delay=0):
    if delay > 0:
        time.sleep(delay)

    tips = [
        '顺顺利利', '早点休息', '愿所有烦恼都消失',
        '别熬夜', '今天过得开心嘛', '天冷了,多穿衣服'
    ]

    bg_colors = [
        'lightpink', 'skyblue', 'lightgreen', 'lavender',
        'lightyellow', 'plum', 'coral', 'bisque', 'aquamarine',
        'mistyrose', 'honeydew', 'lavenderblush', 'oldlace'
    ]

    tip = random.choice(tips)
    bg = random.choice(bg_colors)

    # 创建窗口
    window = tk.Tk()
    window.title('温馨提示')
    window_width = 200
    window_height = 60

    # 设置窗口位置和大小(居中显示在指定坐标)
    window.geometry(f"{window_width}x{window_height}+{int(x)}+{int(y)}")
    window.attributes('-topmost', True)  # 窗口置顶

    # 创建标签并显示文字
    label = tk.Label(
        window,
        text=tip,
        bg=bg,
        font=('微软雅黑', 12),
        width=20,
        height=2
    )
    label.pack(padx=10, pady=10)


    # window.after(3000, window.destroy)  # 3秒后自动关闭
    window.mainloop()


if __name__ == "__main__":
    # 获取屏幕尺寸
    root = tk.Tk()
    screen_width = root.winfo_screenwidth()
    screen_height = root.winfo_screenheight()
    root.destroy()

    # 生成爱心轮廓点
    heart_points = []
    t = 0
    while t < 2 * math.pi:
        x = heart_x(t, 15)  # 增大缩放因子,使爱心更大
        y = heart_y(t, 15)
        heart_points.append((x, y))
        t += 0.1  # 增加点的密度

    # 限制窗口数量,只使用轮廓点
    max_windows = len(heart_points)

    # 创建线程列表
    threads = []

    # 创建窗口线程,按顺序显示爱心轮廓
    for i in range(max_windows):
        x, y = heart_points[i]

        # 将坐标转换为屏幕坐标(爱心居中显示)
        screen_x = int(screen_width / 2 + x)
        screen_y = int(screen_height / 2 + y)

        # 创建线程,每个线程有逐渐增加的延迟
        delay = i * 0.1  # 调整延迟时间
        t = threading.Thread(target=show_warm_tip, args=(screen_x, screen_y, delay))
        threads.append(t)
        t.start()
        time.sleep(0.01)  # 线程启动间隔

要点

1. 爱心曲线方程

我们使用参数方程来绘制爱心形状:

参数 t 详解:​

  • t 是一个角度参数,从 0 到 (约6.28)变化
  • 可以理解为在虚拟圆上旋转的角度,t=0 从右边开始,t=2π 绕一圈回到起点
  • 通过 t 的变化,计算出爱心轮廓上每个点的坐标

size参数的作用:​

  • 控制爱心的大小,数值越大爱心越大
  • 默认值为10,我们在主程序中使用了15来获得更大的爱心

2. 显示温馨弹窗函数(详细拆解)

2.1 函数定义和延迟机制

  • 函数作用​:创建单个提示窗口
  • 参数说明​:
    • x, y:窗口在屏幕上显示的位置坐标
    • delay:延迟时间,控制窗口显示的时机
  • 延迟逻辑​:如果设置了延迟,线程会先暂停指定时间再创建窗口,这样多个窗口就能按顺序显示

2.2 数据准备部分

2.3 窗口创建和基本设置

  • 温馨提示设计​:包含6条不同的祝福语,涵盖生活关怀、心情祝福等
  • 颜色选择​:13种柔和的浅色调,避免刺眼,营造温馨氛围
  • 随机机制​:每次调用函数都会随机选择不同的提示和背景色,增加多样性
  • 窗口初始化​:tk.Tk()创建主窗口对象
  • 标题设置​:窗口标题栏显示"温馨提示"
  • 尺寸定义​:固定宽度200像素,高度60像素,确保内容显示完整
  • 位置定位​:使用geometry方法设置窗口位置,格式为"宽x高+x坐标+y坐标"
  • 置顶属性​:-topmost=True确保窗口显示在最上层,不会被其他窗口遮挡

2.4 标签控件创建和内容显示

  • 标签属性详解​:
    • text:显示随机选择的提示文字
    • bg:设置随机选择的背景色
    • font:使用微软雅黑字体,12号大小,确保清晰可读
    • width=20, height=2:以字符数为单位的尺寸,确保文字完整显示
  • 布局管理​:pack()方法自动排列控件,padx=10, pady=10设置四周10像素的内边距

2.5 窗口事件循环

  • 注意​:在实际使用中,可以添加window.after(3000, window.destroy)让窗口3秒后自动关闭,以实现不同的需要。

3. 主程序逻辑

3.1 屏幕尺寸获取

目的​:获取显示器尺寸,确保爱心能在屏幕中央显示。

3.2 爱心轮廓生成

关键点​:通过参数t从0到2π变化,生成爱心轮廓的坐标点集合。

3.3 多线程窗口创建

在多线程窗口创建这一核心环节,我们通过精巧的线程管理和延迟控制,实现了爱心轮廓的动画效果。具体实现流程如下:

1. 坐标转换处理
首先将计算得到的爱心数学坐标转换为屏幕实际坐标,通过screen_x = int(screen_width/2 + heart_points[i][0])screen_y = int(screen_height/2 + heart_points[i][1])确保爱心在屏幕中央显示。

2. 线程创建核心机制
threading.Thread()是Python中创建新线程的核心方法,它创建一个新的执行线程,能够与主线程并行运行。关键代码threading.Thread(target=show_warm_tip, args=(screen_x, screen_y, delay))中:

  • target参数指定要执行的函数show_warm_tip
  • args以元组形式传递函数所需的三个参数
  • 每个线程独立运行,互不阻塞

3. 动画效果控制

  • 通过delay = i * 0.1实现递增延迟,形成爱心轮廓逐渐绘制的视觉效果
  • 使用time.sleep(0.01)控制线程创建频率,避免系统资源过载
  • 平衡动画流畅性与程序稳定性

总结

这种设计体现了在多线程编程中性能与效果的平衡考量,既保证了爱心动画的视觉吸引力,又确保了程序的运行稳定性。通过threading.Thread()的合理运用,我们成功实现了多个窗口的并行显示,避免了传统单线程程序中的阻塞问题。

到此这篇关于利用Python在万圣节实现比心弹窗告白代码的文章就介绍到这了,更多相关Python比心弹窗告白代码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 快速搭建python爬虫管理平台

    快速搭建python爬虫管理平台

    如今大多数企业都离不开爬虫,它是获取数据的一种有效方式。但是对爬虫有着规模量级要求的企业或个人需要同时处理不同类别的爬虫,这会凭空增添很多附加的管理成本。因此一个成熟的爬虫管理流程应该包含一个管理系统,能够有效处理上述问题。
    2021-05-05
  • Python yield 使用浅析

    Python yield 使用浅析

    这篇文章主要介绍了Python yield 使用浅析,本文给出了多个使用实例来分析yield的使用方法,需要的朋友可以参考下
    2015-05-05
  • 详解django的serializer序列化model几种方法

    详解django的serializer序列化model几种方法

    序列化是将对象状态转换为可保持或传输的格式的过程。这篇文章主要介绍了详解django的serializer序列化model几种方法。具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • 基于Python实现简单的汉字拼音转换工具

    基于Python实现简单的汉字拼音转换工具

    将汉字转为拼音,可以用于批量汉字注音、文字排序、拼音检索文字等常见场景。现在互联网上有许多拼音转换工具,基于Python的开源模块也不少,本文将利用pypinyin模块制作简单的汉字拼音转换工具,感兴趣的可以了解一下
    2022-09-09
  • PHP统计代码行数的小代码

    PHP统计代码行数的小代码

    这篇文章主要为大家详细介绍了PHP统计代码行数的小代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • 使用Django中的filter方法进行数据查询的基本操作

    使用Django中的filter方法进行数据查询的基本操作

    在 Django 中,QuerySet 的 filter() 方法是一个强大的工具,用于从数据库中检索数据并根据指定的条件进行筛选,在本文中,我们将介绍如何使用 filter() 方法来执行各种类型的数据查询操作,需要的朋友可以参考下
    2024-05-05
  • Jinja2过滤器的使用、控制语句示例详解

    Jinja2过滤器的使用、控制语句示例详解

    在Python中,如果需要对某个变量进行处理,我们可以通过函数来实现,这篇文章主要介绍了Jinja2过滤器的使用、控制语句,需要的朋友可以参考下
    2023-03-03
  • python获取网络图片方法及整理过程详解

    python获取网络图片方法及整理过程详解

    这篇文章主要介绍了python获取网络图片方法及整理过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • python获得linux下所有挂载点(mount points)的方法

    python获得linux下所有挂载点(mount points)的方法

    这篇文章主要介绍了python获得linux下所有挂载点(mount points)的方法,涉及Python操作Linux下挂载点的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • python获取淘宝服务器时间的代码示例

    python获取淘宝服务器时间的代码示例

    这篇文章主要介绍了python获取淘宝服务器时间的代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04

最新评论