【Python趣味编程】用 Tkinter 打造“爱心便签墙”:一份来自代码的温柔

在这里插入图片描述

🎯 前言

你有没有想过,除了写枯燥的算法和爬虫,Python 还能用来做什么?今天,我们来玩点不一样的 —— 用 Python 的 GUI 库 Tkinter,在屏幕上“贴”出一个满满爱意的便签心形。

先上一张最终效果图(此处贴你最后一张截图),是不是看起来既浪漫又有极客感?

🧠 核心思路

我们利用 笛卡尔心形线公式 计算出心形轨迹上的每一个坐标点,然后在每个坐标点弹出一个独立的窗口(便签),每个窗口都随机赋予暖心的文字和柔和的色彩,最终堆叠出完美的爱心形状。

关键点:

  1. 数学公式:心形线参数方程。
  2. GUI 编程:用 Python 内置的 tkinter 创建大量无边框窗口。
  3. 堆叠逻辑:通过循环和坐标偏移控制窗口的间距与层数。

💻 完整代码

以下是经过多轮调优后的终极版本。它轻盈、不卡顿,且能画出完美的单圈爱心。

import tkinter as tk
import math
import random
import time

# 便签文字库
TEXTS = [
    "保持好心情", "别熬夜", "多喝水", "照顾好自己",
    "开心", "加油", "微笑面对", "你超棒的",
    "顺顺利利", "好好吃饭", "开心每一天"
]

# 笛卡尔心形线公式
def heart_x(t, scale=15):
    return 16 * math.sin(t)**3 * scale

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

def main():
    # 获取屏幕尺寸
    root_check = tk.Tk()
    screen_width = root_check.winfo_screenwidth()
    screen_height = root_check.winfo_screenheight()
    root_check.destroy()

    center_x = screen_width // 2
    center_y = screen_height // 2

    # 便签窗口大小
    win_w, win_h = 100, 80

    # 创建隐形主窗口
    master = tk.Tk()
    master.geometry("1x1+-10000+-10000") 
    master.title("爱心便签生成器")

    # === 核心循环:画一圈爱心 ===
    total_steps = 300      # 便签总数
    max_angle = 2 * math.pi # 画完整一圈

    for i in range(total_steps):
        # 计算当前角度
        t = (i / total_steps) * max_angle
        
        # 计算坐标
        x_raw = heart_x(t, scale=18)
        y_raw = heart_y(t, scale=18)
        
        # 加入随机偏移,增加自然感
        offset_x = random.randint(-8, 8)
        offset_y = random.randint(-8, 8)
        
        # 最终屏幕坐标
        pos_x = center_x + int(x_raw) + offset_x
        pos_y = center_y + int(y_raw) + offset_y

        # 创建新窗口
        win = tk.Toplevel(master)
        win.geometry(f"{win_w}x{win_h}+{pos_x}+{pos_y}")
        
        # 保持窗口在最顶层
        win.attributes("-topmost", True)

        # 随机颜色和文字
        bg_color = random.choice([
            "#FFFACD", "#FFB6C1", "#98FB98", "#87CEFA", 
            "#DDA0DD", "#FFD700", "#E0FFFF", "#FFE4E1"
        ])
        text_content = random.choice(TEXTS)
        
        # 创建标签(显示文字)
        label = tk.Label(
            win, 
            text=text_content, 
            font=("Microsoft YaHei", 11, "bold"),
            bg=bg_color,
            wraplength=win_w - 15
        )
        label.pack(expand=True, fill="both")
        
        # 应用背景色
        win.configure(bg=bg_color)
        
        # 刷新界面,防止卡死
        master.update()
        time.sleep(0.02) # 控制生成速度

    master.mainloop()

if __name__ == "__main__":
    main()

🔧 代码解析 (小白必看)

  1. 心形公式 (heart_x, heart_y):这是数学的浪漫。t 是角度,从 0 到 2π(一圈),计算出的 (x, y) 刚好构成一个心形。
  2. tk.Toplevel():这是 Tkinter 中创建“子窗口”的方法。我们用它在主窗口之外弹出成百上千个小便签。
  3. win.attributes("-topmost", True):这句代码让每个小窗口都“置顶显示”,这样它们就会覆盖在背景之上,形成堆叠效果。
  4. time.sleep(0.02):非常重要!如果没有它,几百个窗口会同时弹出,瞬间卡死电脑。

🎨 你能怎么玩?

这个程序是 100% 可定制的!你可以尝试修改以下参数,创造出不同的效果:

  • 修改 TEXTS 列表:换上你喜欢的歌词、励志语录,或者你想对某个人说的话。
  • 调整 win_wwin_h:把便签改大或改小,改变心形的整体比例。
  • 修改 scale 参数:在 heart_xheart_y 的调用里改 scale 值,可以放大或缩小整个爱心。
  • 改变总步数 total_steps:数值越大,爱心越密(但也会越卡)。

🚨 注意事项

  1. 运行环境:无需安装任何第三方库,只要是安装了 Python 的 Windows 或 Mac 系统即可运行(Mac 上窗口边框可能稍有不同)。
  2. 关闭方式:由于窗口很多,如果想关闭,直接关闭任务栏上的 Python 窗口或者直接结束进程即可。
  3. 性能提示:如果电脑较慢,建议减少 total_steps 的值,比如改为 200。

✨ 结语

用代码表达心意,是一件很酷的事情。你可以把这个程序发给喜欢的人,让他们运行一下,就能看到满满一屏的“保持好心情”。

如果觉得有趣,别忘了点赞收藏!也欢迎在评论区分享你运行的截图和改写的文字哦!


#Python #趣味编程 #爱心代码 #Tkinter #浪漫代码

更多推荐