自制电脑桌宠
创建一个桌面宠物:Python + Tkinter 实现
实现一个可以在屏幕上自由移动、随机切换动画,并且可以与用户交互的小宠物。
图片支持自定义,最好是用带透明的gif格式图片。
完成后的样子
1. 项目概述
我们的桌面宠物将具备以下功能:
随机选择动画并循环播放。在屏幕上自动移动,碰到屏幕边缘会反弹。用户可以通过鼠标拖动宠物,并且点击宠物会触发交互文本。支持打包为可执行文件,方便分享和使用。2. 所需工具和库
在开始之前,请确保你已经安装了以下工具和库:
Python:确保你安装了 Python 3.x。Tkinter:Python 的标准 GUI 库,用于创建图形界面。Pillow (PIL):用于处理图像和 GIF 动画。PyInstaller(可选):用于将脚本打包为可执行文件。你可以通过以下命令安装 Pillow:
pip install pillow
bash
3. 代码实现
以下是实现桌面宠物的完整代码:
import tkinter as tk from PIL import Image, ImageTk, ImageSequence import random import time import os import sys def get_resource_path(relative_path): """获取打包后的文件路径""" if hasattr(sys, '_MEIPASS'): return os.path.join(sys._MEIPASS, relative_path) return os.path.join(os.path.abspath("."), relative_path) class DesktopPet: def __init__(self, root): self.root = root self.root.attributes("-transparentcolor", "white") self.root.overrideredirect(True) self.root.attributes("-topmost", True) path = [get_resource_path("gif/cat2.gif"), get_resource_path("gif/Pet1.gif"), get_resource_path("gif/pet2.gif")] # 打开 GIF 文件 gif = Image.open(path[random.randint(0, 2)]) # 获取 GIF 的所有帧 frames = [frame.copy() for frame in ImageSequence.Iterator(gif)] # 加载宠物图片 self.images = frames self.current_image_index = 0 self.pet_img = ImageTk.PhotoImage(self.images[self.current_image_index]) # 创建画布 self.canvas = tk.Canvas(root, width=self.images[0].width, height=self.images[0].height, bg='white', highlightthickness=0) self.canvas.pack() # 在画布上显示宠物 self.pet = self.canvas.create_image(0, 0, anchor=tk.NW, image=self.pet_img) # 创建一个文本标签,初始隐藏 self.text_label = self.canvas.create_text(50, 100, text="", fill="pink", font=("Arial", 12)) # 绑定鼠标事件 self.root.bind("<B1-Motion>", self.move_pet) self.root.bind("<ButtonRelease-1>", self.on_click) # 宠物的初始位置 self.x = self.root.winfo_screenwidth() // 2 self.y = self.root.winfo_screenheight() // 2 # 宠物的移动方向 self.dx = 1 self.dy = 1 # 宠物的状态 self.is_idle = True # 开始宠物的自动移动 self.move_automatically() # 开始图片的自动切换 self.change_image() def change_image(self): # 切换到下一张图片 self.current_image_index = (self.current_image_index + 1) % len(self.images) self.pet_img = ImageTk.PhotoImage(self.images[self.current_image_index]) self.canvas.itemconfig(self.pet, image=self.pet_img) # 每隔一段时间切换图片 self.root.after(80, self.change_image) # 每1000毫秒切换一次图片 def move_pet(self, event): # 鼠标拖动宠物 self.x = event.x_root - self.images[0].width // 2 self.y = event.y_root - self.images[0].height // 2 self.root.geometry(f"+{self.x}+{self.y}") def on_click(self, event): if self.is_idle: self.is_idle = False self.canvas.itemconfig(self.text_label, text="你干嘛~") else: self.is_idle = True self.canvas.itemconfig(self.text_label, text="别戳我啦!") # 在这里添加点击后的动画或效果 self.root.after(1000, self.return_to_idle) def return_to_idle(self): # 返回闲置状态 self.is_idle = True self.canvas.itemconfig(self.text_label, text="") def move_automatically(self): # 自动移动宠物 if self.is_idle: self.x += self.dx self.y += self.dy # 检查边界 if self.x <= 0 or self.x >= self.root.winfo_screenwidth() - self.images[0].width: self.dx = -self.dx if self.y <= 0 or self.y >= self.root.winfo_screenheight() - self.images[0].height: self.dy = -self.dy self.root.geometry(f"+{self.x}+{self.y}") # 持续调用自身以实现持续移动 self.root.after(50, self.move_automatically) if __name__ == "__main__": root = tk.Tk() pet = DesktopPet(root) root.mainloop()
python
运行
4. 代码解析
4.1 GIF 动画处理我们使用 Pillow 库来处理 GIF 动画。通过 ImageSequence.Iterator 获取 GIF 的每一帧,并将其存储在一个列表中。然后,我们通过定时器不断切换帧,实现动画效果。
gif = Image.open(path[random.randint(0, 2)]) frames = [frame.copy() for frame in ImageSequence.Iterator(gif)]
python
运行
4.2 自动移动宠物的自动移动通过定时器实现。我们为宠物设置了水平和垂直方向的速度,并在每次移动时检查屏幕边界,实现反弹效果。
self.x += self.dx self.y += self.dy if self.x <= 0 or self.x >= self.root.winfo_screenwidth() - self.images[0].width: self.dx = -self.dx if self.y <= 0 or self.y >= self.root.winfo_screenheight() - self.images[0].height: self.dy = -self.dy
python
运行
4.3 用户交互我们为宠物绑定了鼠标事件,用户可以通过鼠标拖动宠物,并且点击宠物会触发交互文本。
self.root.bind("<B1-Motion>", self.move_pet) self.root.bind("<ButtonRelease-1>", self.on_click)
python
运行
4.4 打包为可执行文件如果你希望将这个项目打包为可执行文件,可以使用 PyInstaller。运行以下命令:
pyinstaller --add-data "images;images" -F -w main.py
bash
注意:--add-data 参数用于指定额外的资源文件夹(如 GIF 图片),格式为 源路径;目标路径。
-w是用于取消出现命令框,你也可以去掉-w
5. 总结
通过这个简单的项目,我们实现了一个功能丰富的桌面宠物。你可以根据自己的喜好添加更多动画、交互效果或优化代码。希望这个项目能为你的编程学习带来乐趣,同时也能为你的桌面增添一份温馨和活力。
如果你有任何问题或建议,欢迎在评论区留言!
相关知识
【教程】把自己画的角色做成电脑桌宠!
电脑桌面版大鹅安卓版下载
桌面破坏王(蹂躏电脑桌面的发泄工具)玩法简介
电脑桌宠,电脑怎么开桌宠?怎么弄桌面宠物?
电脑桌宠,抖音网红桌面大鹅 goose desktop
萌宠食谱:自制宠物饼干
电脑桌宠软件都有哪些
自制狗粮,轻松养宠秘籍
自制宠物美食,呵护健康萌宠
自制犬用罐头 亚宠宠物 衢州自制犬用罐头厂家 视频
网址: 自制电脑桌宠 https://www.mcbbbk.com/newsview1231982.html
上一篇: 萌宠来啦gif图片 |
下一篇: javascript 宠物界面 |
推荐分享

- 1养玉米蛇的危害 28694
- 2狗交配为什么会锁住?从狗狗生 7180
- 3我的狗老公李淑敏33——如何 6236
- 4豆柴犬为什么不建议养?可爱的 4637
- 5南京宠物粮食薄荷饼宠物食品包 4563
- 6中国境内禁养的十大鸟种,你知 4429
- 7湖南隆飞尔动物药业有限公司宠 4259
- 8自制狗狗辅食:棉花面纱犬的美 4257
- 9家养水獭多少钱一只正常 4212
- 10广州哪里卖宠物猫狗的选择性多 4122