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


运行程序后,你的屏幕上会出现由多个小窗口组成的爱心形状,每个窗口都会显示不同的温馨提示,比如"顺顺利利"、"早点休息"等。窗口会按照爱心的轮廓逐渐显示,形成一个动态的爱心效果!我先把代码放在下面,需要可以自取。
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到2π(约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_tipargs以元组形式传递函数所需的三个参数- 每个线程独立运行,互不阻塞
3. 动画效果控制
- 通过
delay = i * 0.1实现递增延迟,形成爱心轮廓逐渐绘制的视觉效果 - 使用
time.sleep(0.01)控制线程创建频率,避免系统资源过载 - 平衡动画流畅性与程序稳定性
总结
这种设计体现了在多线程编程中性能与效果的平衡考量,既保证了爱心动画的视觉吸引力,又确保了程序的运行稳定性。通过threading.thread()的合理运用,我们成功实现了多个窗口的并行显示,避免了传统单线程程序中的阻塞问题。
到此这篇关于利用python在万圣节实现比心弹窗告白代码的文章就介绍到这了,更多相关python比心弹窗告白代码内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论