"大家好!最近在整理技术资料时发现,很多小伙伴都在问如何系统学习Python——从基础语法到爬虫开发,从数据分析到AI应用,不同阶段的学习路径和资源选择确实容易让人迷茫。
今天特意为大家准备了一份经过筛选的Python学习资料包,包含:
✅ 30本经典电子书(从入门到进阶)
✅ 100+实战项目源码
✅ 人工智能入门课程(限时免费)
✅ 编程思维训练手册
无论你是零基础小白还是想提升的开发者,这些资料都能帮你节省大量搜索时间。领取方式非常简单——文末准备了我的名片,扫码即可获取全部资源,还能加入Python学习交流群和同行一起成长!"
————————————————
Python桌面宠物是一种通过Python编程语言开发的、能够在电脑桌面上展示并互动的动画角色程序,它融合了图形界面设计、动画逻辑、用户交互及多媒体处理等技术,具有个性化、互动性和趣味性等特点。以下是详细介绍:
技术实现
-
图形界面框架:
- PyQt5:功能强大的GUI库,支持跨平台开发,提供丰富的控件和功能,适合创建复杂的桌面宠物应用。
- Tkinter:Python内置的GUI库,简单易用,适合快速开发基本的桌面宠物程序。
- Pygame:专注于游戏和多媒体应用的库,提供强大的图形和声音处理能力,适合实现复杂的动画效果。
-
动画逻辑:
- 通过定时器或主循环定期更新宠物的图像,实现动画效果。
- 使用图像编辑软件(如Photoshop、GIMP等)创建宠物的不同状态图片(如静止、行走、跳跃等),并通过代码切换这些图片来模拟宠物的动作。
-
用户交互:
- 捕获鼠标事件(如点击、拖动)和键盘事件,实现宠物与用户的互动。
- 例如,点击宠物时切换状态、播放声音或执行动画;拖动宠物时改变其位置等。
-
多媒体处理:
- 使用音频库(如pygame.mixer)播放宠物的音效,增加互动性和趣味性。
下面我将为你创建一个简单的桌面宠物程序,它会显示在屏幕上,可以拖动,并且有一些简单的交互功能。这个项目适合Python初学者,不需要额外安装复杂的库。
完整代码
import tkinter as tk
from tkinter import PhotoImage
import random
import os
class DesktopPet:
def __init__(self, root):
self.root = root
self.root.overrideredirect(True) # 移除窗口边框
self.root.attributes('-topmost', True) # 窗口置顶
self.root.attributes('-transparentcolor', 'white') # 设置透明色
# 初始化位置(屏幕右下角)
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
self.pet_width = 100
self.pet_height = 100
self.x = screen_width - self.pet_width
self.y = screen_height - self.pet_height
# 创建画布
self.canvas = tk.Canvas(root, width=self.pet_width, height=self.pet_height,
bg='white', highlightthickness=0)
self.canvas.pack()
# 加载宠物图像(这里用简单图形代替,你可以替换为自己的图片)
self.create_pet_graphics()
# 绑定事件
self.canvas.bind('<Button-1>', self.start_move)
self.canvas.bind('<B1-Motion>', self.on_move)
self.canvas.bind('<ButtonRelease-1>', self.stop_move)
self.canvas.bind('<Double-Button-1>', self.on_double_click)
self.canvas.bind('<Button-3>', self.show_menu)
# 动画相关
self.is_moving = False
self.direction = 1 # 1表示向右,-1表示向左
self.animate()
# 右键菜单
self.menu = tk.Menu(root, tearoff=0)
self.menu.add_command(label="喂食", command=self.feed)
self.menu.add_command(label="玩耍", command=self.play)
self.menu.add_command(label="睡觉", command=self.sleep)
self.menu.add_separator()
self.menu.add_command(label="退出", command=root.quit)
# 宠物状态
self.happiness = 100
self.energy = 100
self.is_sleeping = False
# 更新状态
self.update_status()
def create_pet_graphics(self):
"""创建宠物图形(这里用简单图形代替图片)"""
# 身体
self.body = self.canvas.create_oval(10, 10, 90, 90, fill='pink', outline='black')
# 眼睛
self.left_eye = self.canvas.create_oval(30, 30, 40, 40, fill='white')
self.right_eye = self.canvas.create_oval(60, 30, 70, 40, fill='white')
# 眼珠
self.left_pupil = self.canvas.create_oval(33, 33, 37, 37, fill='black')
self.right_pupil = self.canvas.create_oval(63, 33, 67, 37, fill='black')
# 嘴巴
self.mouth = self.canvas.create_arc(30, 40, 70, 70, start=180, extent=180, width=2)
def start_move(self, event):
"""开始移动宠物"""
self.start_x = event.x
self.start_y = event.y
self.is_moving = True
def on_move(self, event):
"""移动宠物"""
if self.is_moving:
delta_x = event.x - self.start_x
delta_y = event.y - self.start_y
self.x += delta_x
self.y += delta_y
self.root.geometry(f'+{self.x}+{self.y}')
def stop_move(self, event):
"""停止移动宠物"""
self.is_moving = False
def on_double_click(self, event):
"""双击事件 - 宠物会有反应"""
if not self.is_sleeping:
self.canvas.delete(self.mouth)
self.mouth = self.canvas.create_arc(30, 50, 70, 80, start=0, extent=180, width=2)
self.root.after(1000, self.reset_mouth)
self.happiness = min(100, self.happiness + 10)
def reset_mouth(self):
"""重置嘴巴形状"""
self.canvas.delete(self.mouth)
self.mouth = self.canvas.create_arc(30, 40, 70, 70, start=180, extent=180, width=2)
def show_menu(self, event):
"""显示右键菜单"""
self.menu.post(event.x_root, event.y_root)
def feed(self):
"""喂食"""
if not self.is_sleeping:
self.happiness = min(100, self.happiness + 15)
self.energy = min(100, self.energy + 20)
# 显示一个心形表示喜欢
heart = self.canvas.create_text(50, 20, text='❤️', font=('Arial', 12))
self.root.after(1000, lambda: self.canvas.delete(heart))
def play(self):
"""玩耍"""
if not self.is_sleeping:
self.happiness = min(100, self.happiness + 20)
self.energy = max(0, self.energy - 10)
# 宠物跳一下
for i in range(5):
self.root.after(50*i, lambda: self.root.geometry(f'+{self.x}+{self.y-10}'))
self.root.after(50*(i+1), lambda: self.root.geometry(f'+{self.x}+{self.y}'))
def sleep(self):
"""睡觉/唤醒"""
self.is_sleeping = not self.is_sleeping
if self.is_sleeping:
# 变成睡觉状态
self.canvas.delete(self.mouth)
self.mouth = self.canvas.create_line(40, 60, 60, 60, width=2)
# 添加zZZ标记
self.zzz = self.canvas.create_text(50, 20, text='zZZ', font=('Arial', 10))
else:
self.canvas.delete(self.mouth)
self.mouth = self.canvas.create_arc(30, 40, 70, 70, start=180, extent=180, width=2)
self.canvas.delete(self.zzz)
def animate(self):
"""动画效果"""
if not self.is_sleeping:
# 随机眨眼
if random.random() < 0.05:
self.blink()
# 随机移动
if random.random() < 0.02:
self.auto_move()
# 定期减少能量
if random.random() < 0.1:
self.energy = max(0, self.energy - 1)
# 如果能量低,自动睡觉
if self.energy <= 20 and not self.is_sleeping:
self.sleep()
self.root.after(100, self.animate)
def blink(self):
"""眨眼动画"""
self.canvas.coords(self.left_eye, 30, 35, 40, 36)
self.canvas.coords(self.right_eye, 60, 35, 70, 36)
self.root.after(200, self.reset_eyes)
def reset_eyes(self):
"""重置眼睛"""
self.canvas.coords(self.left_eye, 30, 30, 40, 40)
self.canvas.coords(self.right_eye, 60, 30, 70, 40)
def auto_move(self):
"""自动移动"""
screen_width = self.root.winfo_screenwidth()
new_x = self.x + self.direction * 20
# 检查边界
if new_x < 0:
new_x = 0
self.direction = 1
elif new_x > screen_width - self.pet_width:
new_x = screen_width - self.pet_width
self.direction = -1
self.x = new_x
self.root.geometry(f'+{self.x}+{self.y}')
def update_status(self):
"""更新宠物状态"""
if not self.is_sleeping:
# 能量自然消耗
self.energy = max(0, self.energy - 0.1)
# 无聊时降低幸福感
if random.random() < 0.01:
self.happiness = max(0, self.happiness - 1)
self.root.after(1000, self.update_status)
def run(self):
"""运行宠物"""
self.root.geometry(f'+{self.x}+{self.y}')
self.root.mainloop()
if __name__ == '__main__':
root = tk.Tk()
pet = DesktopPet(root)
pet.run()
如何运行
- 确保你已安装Python(建议Python 3.6+)
- 将上面的代码复制到一个文件中,命名为
desktop_pet.py - 直接运行这个Python文件
功能说明
这个桌面宠物有以下功能:
- 基本交互:
- 可以拖动宠物到屏幕任何位置
- 双击宠物会有反应(开心的表情)
- 右键点击显示菜单,可以选择喂食、玩耍、睡觉或退出
- 自动行为:
- 宠物会随机眨眼
- 会自动在屏幕上移动
- 能量低时会自动睡觉
- 状态会随时间变化(能量减少,幸福感变化)
- 状态系统:
- 幸福感(通过交互增加)
- 能量(随时间减少,通过喂食增加)
自定义你的宠物
如果你想让宠物更个性化,可以:
- 替换图形:
- 修改
create_pet_graphics()方法,使用PhotoImage加载自己的图片 - 示例:
self.pet_image = PhotoImage(file='pet.png') self.canvas.create_image(0, 0, image=self.pet_image, anchor='nw')添加更多动画:
- 在
animate()方法中添加更多随机行为 - 例如跳舞、特殊表情等
- 在
- 修改
- 添加声音:
- 使用
playsound库添加音效 - 示例:
from playsound import playsound playsound('meow.mp3')
- 使用
零基础常见问题解答
- 如何关闭宠物?
- 右键点击宠物,选择"退出"
- 为什么看不到宠物?
- 检查是否被其他窗口遮挡
- 宠物默认出现在右下角
- 如何让宠物显示在其他窗口之上?
- 代码中已经设置了
'-topmost', True,确保没有其他程序覆盖了这个设置
- 代码中已经设置了
- 我想让宠物更大/更小
- 修改
pet_width和pet_height变量的值
- 修改
希望这个简单的桌面宠物能给你带来乐趣!你可以根据自己的喜好进一步扩展和完善它。



&spm=1001.2101.3001.5002&articleId=149835737&d=1&t=3&u=99f33b99b6fe4e12a57e1cb43fe4f0d2)
1万+

被折叠的 条评论
为什么被折叠?



