python写窗口特效码源码

import tkinter as tk

import random

from math import sin, cos, pi

import time

class AnimatedWindow:

    def __init__(self):

        self.root = tk.Tk()

        self.root.title("动态窗口特效")

        self.root.geometry("800x600")

       

        # 创建画布

        self.canvas = tk.Canvas(self.root, width=800, height=600, bg='black')

        self.canvas.pack(fill='both', expand=True)

       

        # 存储粒子

        self.particles = []

       

        # 创建初始粒子

        for _ in range(50):

            x = random.randint(0, 800)

            y = random.randint(0, 600)

            dx = random.uniform(-2, 2)

            dy = random.uniform(-2, 2)

            size = random.randint(2, 5)

            color = '#{:02x}{:02x}{:02x}'.format(

                random.randint(100, 255),

                random.randint(100, 255),

                random.randint(100, 255)

            )

            particle = self.canvas.create_oval(

                x, y, x+size, y+size,

                fill=color, outline=color

            )

            self.particles.append({

                'id': particle,

                'x': x, 'y': y,

                'dx': dx, 'dy': dy,

                'size': size

            })

       

        self.animate()

       

    def animate(self):

        for p in self.particles:

            # 更新位置

            p['x'] += p['dx']

            p['y'] += p['dy']

           

            # 边界检查

            if p['x'] < 0 or p['x'] > 800:

                p['dx'] *= -1

            if p['y'] < 0 or p['y'] > 600:

                p['dy'] *= -1

           

            # 移动粒子

            self.canvas.moveto(

                p['id'],

                p['x'],

                p['y']

            )

       

        # 添加连线效果

        self.canvas.delete('line')

        for i, p1 in enumerate(self.particles):

            for p2 in self.particles[i+1:]:

                dist = ((p1['x'] - p2['x'])**2 + (p1['y'] - p2['y'])**2)**0.5

                if dist < 100:

                    opacity = int((1 - dist/100) * 255)

                    color = '#{:02x}{:02x}{:02x}'.format(opacity, opacity, opacity)

                    self.canvas.create_line(

                        p1['x'], p1['y'],

                        p2['x'], p2['y'],

                        fill=color, tags='line'

                    )

       

        self.root.after(20, self.animate)

   

    def run(self):

        self.root.mainloop()

if __name__ == "__main__":

    app = AnimatedWindow()

    app.run()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值