import tkinter as tk
import random
import math
import time
def create_tip_window(main_window, tips, bg_colors, x, y):
window_width = 300
window_height = 90
window = tk.Toplevel(main_window)
window.title('温馨提示')
window.geometry(f"{window_width}x{window_height}+{int(x)}+{int(y)}") # 坐标转整数
window.attributes('-topmost', True)
tip = random.choice(tips)
bg = random.choice(bg_colors)
tk.Label(
window,
text=tip,
bg=bg,
font=('微软雅黑', 16),
width=30,
height=3
).pack()
return window
def close_windows_one_by_one(all_windows, index=0, delay=10):
if index < len(all_windows):
window = all_windows[index]
if window.winfo_exists():
window.destroy()
all_windows[0].master.after(delay, close_windows_one_by_one, all_windows, index + 1, delay)
else:
create_final_window(all_windows[0].master)
def create_final_window(main_window):
final_width = 300
final_height = 90
screen_width = main_window.winfo_screenwidth()
screen_height = main_window.winfo_screenheight()
x = (screen_width - final_width) // 2
y = (screen_height - final_height) // 2
final_window = tk.Toplevel(main_window)
final_window.title('温馨提示')
final_window.geometry(f"{final_width}x{final_height}+{x}+{y}")
final_window.attributes('-topmost', True)
tk.Label(
final_window,
text='愿所有烦恼都消失',
bg='lightpink',
font=('微软雅黑', 18, 'bold'),
width=30,
height=3
).pack()
def calculate_heart_coords(num_points, scale=80, offset_x=900, offset_y=500):
"""
计算爱心轨迹的坐标列表
:param num_points: 点的数量(弹窗数量)
:param scale: 爱心大小缩放比例(越大爱心越大)
:param offset_x: 爱心中心X坐标偏移(调整爱心在屏幕上的水平位置)
:param offset_y: 爱心中心Y坐标偏移(调整爱心在屏幕上的垂直位置)
:return: 坐标列表 [(x1,y1), (x2,y2), ...]
"""
coords = []
for i in range(num_points):
# 参数t从0到2π,覆盖整个爱心曲线
t = 2 * math.pi * i / num_points
# 爱心数学公式(笛卡尔坐标系)
x = scale * 16 * math.sin(t)**3
y = -scale * (13 * math.cos(t) - 5 * math.cos(2*t) - 2 * math.cos(3*t) - math.cos(4*t))
# 偏移到屏幕合适位置
coords.append((x + offset_x, y + offset_y))
return coords
def main():
main_window = tk.Tk()
main_window.withdraw()
tips = [
'多喝水哦~', '保持微笑呀', '每天都要元气满满',
'记得吃水果', '保持好心情', '好好爱自己', '我想你了',
'梦想成真', '期待下一次见面', '顺顺利利', '早点休息',
'愿所有烦恼都消失', '别熬夜', '今天过得开心嘛', '天冷了,多穿衣服',
'多喝水哦~', '保持微笑呀', '每天都要元气满满',
'记得吃水果', '保持好心情', '好好爱自己', '我想你了',
'梦想成真', '期待下一次见面', '金榜题名',
'顺顺利利', '早点休息', '愿所有烦恼都消失',
'别熬夜', '今天过得开心嘛', '天冷了,多穿衣服'
]
bg_colors = [
'lightpink', 'skyblue', 'lightgreen', 'lavender',
'lightyellow', 'plum', 'coral', 'bisque', 'aquamarine',
'mistyrose', 'honeydew', 'lavenderblush', 'oldlace'
]
all_windows = []
num_windows = 200 # 弹窗数量(与原代码一致)
# 计算爱心轨迹坐标(可调整scale、offset_x、offset_y改变爱心大小和位置)
heart_coords = calculate_heart_coords(
num_points=num_windows,
scale=40, # 爱心大小(建议50-120)
offset_x=900, # 水平偏移(屏幕宽度一般1920,中间偏右)
offset_y=500 # 垂直偏移(屏幕高度一般1080,中间位置)
)
# 沿爱心轨迹创建弹窗
for i in range(num_windows):
x, y = heart_coords[i]
# 给每个坐标加微小随机偏移,让弹窗更自然(可选)
x += random.randint(-15, 15)
y += random.randint(-15, 15)
window = create_tip_window(main_window, tips, bg_colors, x, y)
all_windows.append(window)
main_window.update()
time.sleep(0.03) # 弹窗创建间隔(与原代码一致)
main_window.after(2000, close_windows_one_by_one, all_windows)
main_window.mainloop()
if __name__ == "__main__":
main()
爱心轨迹定制文案弹窗
最新推荐文章于 2026-06-19 17:00:49 发布

1548

被折叠的 条评论
为什么被折叠?



