首页 分享 自制电脑桌宠

自制电脑桌宠

来源:萌宠菠菠乐园 时间:2025-08-04 21:41

创建一个桌面宠物: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 宠物界面

推荐分享