1、基本功能:
宠物会在桌面上随机移动。
用户可以通过鼠标点击宠物,触发交互(如改变表情)。
2、扩展功能:
宠物会根据鼠标位置做出反应。
添加简单的动画效果。
import tkinter as tk
from PIL import Image, ImageTk
import random
class DesktopPet:
def __init__(self, root):
# 初始化窗口
self.root = root
self.root.overrideredirect(True) # 去掉窗口边框
self.root.attributes("-topmost", True) # 窗口置顶
self.root.wm_attributes("-transparentcolor", "white") # 设置透明颜色
# 加载宠物图像
self.pet_images = [
ImageTk.PhotoImage(Image.open("pet_normal.png").convert("RGBA")),
ImageTk.PhotoImage(Image.open("pet_happy.png").convert("RGBA"))
]
self.current_image = 0 # 当前显示的图片索引
# 创建画布并放置宠物
self.canvas = tk.Canvas(root, width=100, height=100, highlightthickness=0)
self.canvas.pack()
self.pet = self.canvas.create_image(50, 50, image=self.pet_images[self.current_image])
# 绑定事件
self.canvas.bind("<Button-1>", self.on_click) # 鼠标点击事件
self.canvas.bind("<Motion>", self.on_hover) # 鼠标悬停事件
# 开始动画
self.move_pet()
def on_click(self, event):
"""处理鼠标点击事件"""
self.current_image = 1 # 切换到“开心”状态
self.canvas.itemconfig(self.pet, image=self.pet_images[self.current_image])
self.root.after(500, self.reset_image) # 半秒后恢复默认状态
def on_hover(self, event):
"""处理鼠标悬停事件"""
x, y = event.x, event.y
print(f"Mouse is at ({x}, {y})")
# 可以在这里添加更多逻辑,比如让宠物跟随鼠标
def reset_image(self):
"""重置宠物图片为默认状态"""
self.current_image = 0
self.canvas.itemconfig(self.pet, image=self.pet_images[self.current_image])
def move_pet(self):
"""随机移动宠物"""
x = random.randint(-10, 10)
y = random.randint(-10, 10)
self.canvas.move(self.pet, x, y)
# 获取当前窗口位置
current_x, current_y = self.root.winfo_x(), self.root.winfo_y()
new_x = current_x + x
new_y = current_y + y
# 更新窗口位置
self.root.geometry(f"+{new_x}+{new_y}")
# 循环调用,形成动画效果
self.root.after(100, self.move_pet)
if __name__ == "__main__":
# 创建主窗口
root = tk.Tk()
pet = DesktopPet(root)
root.mainloop()