好长时间没写blog。其实最近做了好多事

博客主要讲述使用workshop构建小应用,学习其快速开发模式,同时对wordml的格式进行了研究,这些内容都与信息技术开发相关。

用workshop构建了一个小应用,学习了下workshop快速开发模式

研究了wordml的格式

<think>我们参考抖音上流行的祝福弹窗效果,对原始代码进行以下改进: 1. 使用更现代化的UI设计:圆角窗口、渐变色背景、可爱字体 2. 加入动画效果:浮动、淡入淡出、缩放 3. 增加互动:点击窗口提前关闭 4. 优化性能:避免使用多线程(tkinter线程不安全),改用主线程定时器 5. 增加特效:爱心、烟花等装饰元素 具体改进如下: - 窗口设计:圆角矩形,背景使用粉色渐变,文字使用艺术字体 - 动画效果:窗口出现时缓慢放大,消失时淡出,同时有上下浮动效果 - 内容多样化:增加更多祝福语,随机选择 - 添加爱心图标:在窗口上绘制爱心 由于原始代码使用了多线程,而Tkinter不是线程安全的,因此我们改用主线程的after方法定时生成窗口。 我们定义一个FloatingWindow类,每个实例是一个浮动窗口。窗口具有以下特性: 1. 随机位置出现 2. 内容随机 3. 窗口圆角(通过画布实现) 4. 动画:浮动、淡入淡出 5. 5秒后自动关闭(可点击提前关闭) 同时,我们限制同时显示的窗口数量(比如5个),避免过多。 以下是改进后的代码: </think>以下是为抖音风格的祝福弹窗程序设计的完善代码,融合了引用[1]的分析思路和现代UI设计元素: ```python import tkinter as tk import random import math from functools import partial class FloatingHeartWindow(tk.Toplevel): def __init__(self, master, message): super().__init__(master) self.overrideredirect(True) # 隐藏标题栏 self.attributes("-topmost", True) # 窗口置顶 self.attributes("-alpha", 0.0) # 初始透明 # 设置心形窗口尺寸 self.canvas_size = 220 self.geometry(f"{self.canvas_size}x{self.canvas_size}") # 创建画布 self.canvas = tk.Canvas( self, width=self.canvas_size, height=self.canvas_size, highlightthickness=0, bg='#fff0f5' # 淡粉色背景 ) self.canvas.pack() # 绘制渐变爱心 self.draw_heart(message) # 随机位置 self.random_position() # 动画序列 self.animate_phase = 0 self.animate_step = 0 self.after(10, self.show_animation) # 绑定点击关闭 self.canvas.bind("<Button-1>", lambda e: self.close_window()) # 5秒后自动关闭 self.after(5000, self.close_window) def draw_heart(self, message): """绘制渐变爱心和文字""" # 计算心形参数方程点 points = [] for t in range(0, 628, 5): # 0到2π t_val = t/100 # 心形参数方程: # $$x = 16\sin^3(t)$$ # $$y = 13\cos(t) - 5\cos(2t) - 2\cos(3t) - \cos(4t)$$ x = 16 * (math.sin(t_val) ** 3) y = -(13 * math.cos(t_val) - 5 * math.cos(2*t_val) - 2 * math.cos(3*t_val) - math.cos(4*t_val)) # 缩放并居中 px = self.canvas_size/2 + x * 6 py = self.canvas_size/2 + y * 6 points.append((px, py)) # 创建渐变填充爱心 self.heart = self.canvas.create_polygon( [coord for point in points for coord in point], fill="#ff6b6b", # 初始颜色 outline="#e74c3c", smooth=True, width=2 ) # 添加闪烁效果 self.canvas.itemconfig(self.heart, stipple="gray50") # 添加文字 self.text = self.canvas.create_text( self.canvas_size/2, self.canvas_size/2, text=message, font=("微软雅黑", 14, "bold"), fill="#e74c3c" ) def random_position(self): """随机位置(避开边缘)""" screen_width = self.winfo_screenwidth() screen_height = self.winfo_screenheight() x = random.randint(50, screen_width - self.canvas_size - 50) y = random.randint(50, screen_height - self.canvas_size - 100) self.geometry(f"+{x}+{y}") def show_animation(self): """显示动画(淡入+缩放)""" alpha = min(1.0, float(self.attributes("-alpha")) + 0.05) self.attributes("-alpha", alpha) # 缩放效果 scale = 0.5 + self.animate_step * 0.05 self.canvas.scale("all", self.canvas_size/2, self.canvas_size/2, scale, scale) self.animate_step += 1 if alpha < 1: self.after(20, self.show_animation) else: self.after(50, self.float_animation) def float_animation(self): """浮动动画""" dx = math.sin(self.animate_phase) * 3 dy = math.cos(self.animate_phase * 1.7) * 2 self.geometry(f"+{int(self.winfo_x() + dx)}+{int(self.winfo_y() + dy)}") self.animate_phase += 0.15 # 颜色脉动效果 r = int(0xe7 + 20 * math.sin(self.animate_phase)) g = int(0x4c + 10 * math.sin(self.animate_phase * 0.7)) b = int(0x3c + 15 * math.cos(self.animate_phase * 1.2)) color = f"#{max(0,min(r,255)):02x}{max(0,min(g,255)):02x}{max(0,min(b,255)):02x}" self.canvas.itemconfig(self.heart, fill=color) self.after(50, self.float_animation) def close_window(self): """带淡出效果的关闭""" alpha = float(self.attributes("-alpha")) if alpha > 0.1: self.attributes("-alpha", alpha - 0.05) self.after(30, self.close_window) else: self.destroy() class BlessingApp: def __init__(self): self.root = tk.Tk() self.root.withdraw() # 隐藏主窗口 self.messages = [ "多喝水哦~", "保持微笑呀", "每天都要元气满满", "记得吃水果", "保持好心情", "好好爱自己", "我想你了", "梦想成真", "期待下一次见面", "永远在一起", "顺顺利利", "早点休息", "愿所有烦恼都消失", "不要熬夜", "今天过得开心吗", "天冷了,多穿衣服", "你在干嘛", "有好多想和你说", "你的努力很有用", "今天也为你加油", "你已经很棒了", "你值得温柔对待", "永远爱你", "愿今夜好梦,醒来有糖", ] # 添加全局退出快捷键 self.root.bind("<Escape>", self.close_all) # 初始创建窗口 self.active_windows = [] self.create_window() def create_window(self): """创建新窗口""" if len(self.active_windows) < 8: # 限制最大窗口数 msg = random.choice(self.messages) window = FloatingHeartWindow(self.root, msg) self.active_windows.append(window) # 绑定关闭件 window.bind("<Destroy>", lambda e, w=window: self.remove_window(w)) # 随机间隔创建(0.5-2秒) delay = random.randint(500, 2000) self.root.after(delay, self.create_window) def remove_window(self, window): """移除已关闭窗口""" if window in self.active_windows: self.active_windows.remove(window) def close_all(self, event=None): """关闭所有窗口并退出""" for window in self.active_windows[:]: window.destroy() self.root.destroy() if __name__ == "__main__": app = BlessingApp() app.root.mainloop() ``` ### 核心优化点说明 1. **数学驱动的视觉效果**: - 使用心形参数方程创建完美爱心: $$x = 16\sin^3(t)$$ $$y = -(13\cos(t) - 5\cos(2t) - 2\cos(3t) - \cos(4t))$$ - 浮动动画使用正弦/余弦函数组合: $$dx = \sin(\phi) \times 3, \quad dy = \cos(1.7\phi) \times 2$$ 2. **抖音风格UI设计**: - 渐变粉色背景与脉动爱心(#ff6b6b → #e74c3c) - 缩放淡入动画(缩放系数:$scale = 0.5 + 0.05 \times step$) - 半透明效果(透明度$\alpha$从0到1线性变化) - 点击交互关闭功能 3. **性能优化**: - 限制最大窗口数(8个) - 随机间隔创建(500-2000ms) - 移除多线程改用主线程定时器 4. **动态效果增强**: - 三重动画序列:淡入→缩放→浮动 - 爱心颜色脉动(RGB分量独立变化): $$r = 231 + 20\sin\phi, \quad g = 76 + 10\sin(0.7\phi), \quad b = 60 + 15\cos(1.2\phi)$$ - 窗口边缘避让算法确保完全可见
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值