排排排成心♥

37 阅读3分钟

image.png

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


def dow(msg, x, y, target_x, target_y, speed=2):
    window = tk.Tk()
    window.geometry(f"180x70+{int(x)}+{int(y)}")

    # 随机选择背景颜色
    bg_colors = ['#00FFFF', '#7FFFD4', '#00BFFF', '#FFB6C1', '#FF69B4', '#FFD700', '#F0F0F0',
                 '#98FB98', '#ADD8E6', '#FFA07A', '#FFC0CB', '#BDB76B', '#87CEFA']
    bg_color = random.choice(bg_colors)

    # 创建标签并显示祝福语
    label = tk.Label(window, text=msg, bg=bg_color, font=('楷体', 16))
    label.pack(fill=tk.BOTH, expand=True)

    # 计算移动路径
    dx = target_x - x
    dy = target_y - y
    steps = 50  # 动画步数
    step_x = dx / steps
    step_y = dy / steps

    # 执行移动动画
    for i in range(steps):
        x += step_x
        y += step_y
        window.geometry(f"180x70+{int(x)}+{int(y)}")
        window.update()
        time.sleep(0.01)

    window.mainloop()


def get_heart_points(num_points, center_x, center_y, scale=300):
    """生成爱心形状的点坐标"""
    points = []
    for i in range(num_points):
        t = i * 2 * math.pi / num_points
        x = 16 * math.sin(t) ** 3
        y = 13 * math.cos(t) - 5 * math.cos(2 * t) - 2 * math.cos(3 * t) - math.cos(4 * t)
        x = center_x + x * scale / 16
        y = center_y - y * scale / 16
        points.append((x, y))
    return points


def main():
    # 100条不同的祝福语
    messages = [
        "顺遂长安!", "付陈君!", "永远被爱包围!",
        "岁岁平安!", "生辰喜乐!", "万事胜意!",
        "心想事成!", "笑口常开!", "前程似锦!",
        "身体健康!", "工作顺利!", "学业进步!",
        "财源广进!", "家庭幸福!", "爱情甜蜜!",
        "友谊长存!", "好运连连!", "平安喜乐!",
        "幸福美满!", "吉祥如意!", "福如东海!",
        "寿比南山!", "一帆风顺!", "二龙腾飞!",
        "三羊开泰!", "四季平安!", "五福临门!",
        "六六大顺!", "七星高照!", "八方来财!",
        "九九同心!", "十全十美!", "百事可乐!",
        "千事吉祥!", "万事如意!", "心想事成!",
        "美梦成真!", "好运连连!", "幸福安康!",
        "笑口常开!", "青春永驻!", "活力四射!",
        "神采飞扬!", "自信满满!", "魅力无限!",
        "光芒万丈!", "才华横溢!", "智慧过人!",
        "勇敢无畏!", "坚韧不拔!", "乐观向上!",
        "积极进取!", "勇于创新!", "追求卓越!",
        "超越自我!", "成就非凡!", "创造辉煌!",
        "梦想成真!", "理想实现!", "目标达成!",
        "挑战成功!", "突破极限!", "超越巅峰!",
        "团结一心!", "众志成城!", "携手共进!",
        "合作共赢!", "共创未来!", "共享成果!",
        "感恩遇见!", "珍惜当下!", "展望未来!",
        "把握机遇!", "迎接挑战!", "拥抱变化!",
        "适应发展!", "不断进步!", "持续成长!",
        "终身学习!", "与时俱进!", "开拓创新!",
        "勇于探索!", "发现美好!", "创造价值!",
        "服务社会!", "贡献力量!", "实现价值!",
        "追求梦想!", "坚持信念!", "永不放弃!",
        "勇往直前!", "砥砺前行!", "乘风破浪!",
        "披荆斩棘!", "迎难而上!", "永不言败!",
        "愈挫愈勇!", "永不退缩!", "百折不挠!",
        "坚韧不拔!", "毅力惊人!", "决心坚定!",
        "信心满满!", "自信自强!", "自立更生!",
        "自强不息!", "厚德载物!", "上善若水!",
        "海纳百川!", "有容乃大!", "宁静致远!",
        "淡泊明志!", "知足常乐!", "感恩生活!",
        "热爱生命!", "享受当下!", "珍惜时光!",
        "活在当下!", "拥抱生活!", "热爱世界!",
        "传递温暖!", "分享快乐!", "奉献爱心!",
        "乐于助人!", "与人为善!", "以德服人!",
        "以礼待人!", "以诚相待!", "以心相交!",
        "以情相待!", "以义相交!", "以信立身!",
        "以爱处世!", "以和为贵!", "以善为宝!"
    ]

    # 获取屏幕中心
    temp = tk.Tk()
    center_x, center_y = temp.winfo_screenwidth() // 2, temp.winfo_screenheight() // 2
    screen_width = temp.winfo_screenwidth()
    screen_height = temp.winfo_screenheight()
    temp.destroy()

    # 生成爱心点
    num_windows = 100
    heart_points = get_heart_points(num_windows, center_x, center_y)

    # 启动线程创建窗口
    for i in range(num_windows):
        # 随机初始位置
        rand_x = random.randint(0, screen_width)
        rand_y = random.randint(0, screen_height)
        t = threading.Thread(target=dow,
                             args=(random.choice(messages), rand_x, rand_y, heart_points[i][0], heart_points[i][1]))
        t.start()
        time.sleep(0.05)  # 控制窗口弹出速度


if __name__ == "__main__":
    main()