爱心轨迹定制文案弹窗

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值