电脑桌面太单调,用Python写一个桌面小宠物应用。
下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡,可以响应鼠标点击,并且有简单的动画效果。
import tkinter as tk
import random
import time
from PIL import Image, ImageTk
import os
import sysclass DesktopPet:def __init__(self, root):self.root = rootself.root.overrideredirect(True) # 移除窗口边框self.root.wm_attributes("-topmost", True) # 窗口置顶self.root.wm_attributes("-transparentcolor", "white") # 设置白色为透明色# 设置窗口大小和初始位置self.width = 100self.height = 100screen_width = self.root.winfo_screenwidth()screen_height = self.root.winfo_screenheight()self.x = random.randint(0, screen_width - self.width)self.y = random.randint(0, screen_height - self.height)# 设置窗口位置self.root.geometry(f"{self.width}x{self.height}+{self.x}+{self.y}")# 创建画布self.canvas = tk.Canvas(self.root, width=self.width, height=self.height, highlightthickness=0, bg='white')self.canvas.pack()# 加载宠物图像self.load_images()self.current_image_index = 0self.pet_image = self.canvas.create_image(50, 50, image=self.images[0])# 初始化变量self.direction_x = random.choice([-3, -2, -1, 1, 2, 3])self.direction_y = random.choice([-3, -2, -1, 1, 2, 3])self.last_move_time = time.time()self.move_delay = 0.05 # 移动延迟(秒)self.last_animation_time = time.time()self.animation_delay = 0.2 # 动画延迟(秒)self.is_sleeping = False# 绑定事件self.root.bind("<Button-1>", self.on_click) # 鼠标左键点击self.root.bind("<Button-3>", self.on_right_click) # 鼠标右键点击self.root.bind("<B1-Motion>", self.on_drag) # 拖动宠物# 开始移动self.move()def load_images(self):# 创建宠物图像self.images = []# 正常状态图像for i in range(4):img = Image.new('RGBA', (100, 100), (255, 255, 255, 0))self.create_pet_image(img, i)self.images.append(ImageTk.PhotoImage(img))# 睡觉状态图像img_sleep = Image.new('RGBA', (100, 100), (255, 255, 255, 0))self.create_sleeping_pet(img_sleep)self.sleep_image = ImageTk.PhotoImage(img_sleep)def create_pet_image(self, img, frame):# 绘制宠物身体from PIL import ImageDrawdraw = ImageDraw.Draw(img)# 身体(圆形)body_color = (255, 200, 200) # 浅粉色draw.ellipse([20, 20, 80, 80], fill=body_color)# 耳朵draw.ellipse([15, 15, 35, 35], fill=body_color)draw.ellipse([65, 15, 85, 35], fill=body_color)# 眼睛(根据帧数变化位置,产生眨眼效果)eye_color = (0, 0, 0)if frame == 3: # 眨眼帧draw.ellipse([35, 45, 45, 50], fill=eye_color)draw.ellipse([55, 45, 65, 50], fill=eye_color)else:draw.ellipse([35, 40, 45, 50], fill=eye_color)draw.ellipse([55, 40, 65, 50], fill=eye_color)# 嘴巴(微笑)draw.arc([35, 50, 65, 70], start=0, end=180, fill=eye_color, width=2)# 腮红blush_color = (255, 150, 150)draw.ellipse([25, 55, 35, 65], fill=blush_color)draw.ellipse([65, 55, 75, 65], fill=blush_color)def create_sleeping_pet(self, img):# 绘制睡觉状态的宠物from PIL import ImageDrawdraw = ImageDraw.Draw(img)# 身体(圆形)body_color = (255, 200, 200) # 浅粉色draw.ellipse([20, 20, 80, 80], fill=body_color)# 耳朵draw.ellipse([15, 15, 35, 35], fill=body_color)draw.ellipse([65, 15, 85, 35], fill=body_color)# 闭着的眼睛draw.line([35, 45, 45, 45], fill=(0, 0, 0), width=2)draw.line([55, 45, 65, 45], fill=(0, 0, 0), width=2)# Zzz... 睡眠符号draw.text((70, 30), "Zzz", fill=(100, 100, 255))def move(self):current_time = time.time()# 移动宠物if current_time - self.last_move_time > self.move_delay:screen_width = self.root.winfo_screenwidth()screen_height = self.root.winfo_screenheight()# 更新位置new_x = self.x + self.direction_xnew_y = self.y + self.direction_y# 边界检测if new_x <= 0 or new_x >= screen_width - self.width:self.direction_x *= -1new_x = max(0, min(new_x, screen_width - self.width))if new_y <= 0 or new_y >= screen_height - self.height:self.direction_y *= -1new_y = max(0, min(new_y, screen_height - self.height))self.x = new_xself.y = new_y# 更新窗口位置self.root.geometry(f"+{int(self.x)}+{int(self.y)}")self.last_move_time = current_time# 更新动画if current_time - self.last_animation_time > self.animation_delay:if not self.is_sleeping:self.current_image_index = (self.current_image_index + 1) % 4self.canvas.itemconfig(self.pet_image, image=self.images[self.current_image_index])self.last_animation_time = current_time# 随机改变方向if random.random() < 0.01: # 1%的几率self.direction_x = random.choice([-3, -2, -1, 1, 2, 3])self.direction_y = random.choice([-3, -2, -1, 1, 2, 3])# 随机进入睡眠状态if not self.is_sleeping and random.random() < 0.002: # 0.2%的几率self.is_sleeping = Trueself.canvas.itemconfig(self.pet_image, image=self.sleep_image)self.root.after(5000, self.wake_up) # 5秒后醒来# 继续移动self.root.after(10, self.move)def wake_up(self):self.is_sleeping = Falsedef on_click(self, event):# 当点击宠物时,改变方向self.direction_x = random.choice([-3, -2, -1, 1, 2, 3])self.direction_y = random.choice([-3, -2, -1, 1, 2, 3])# 显示点击效果self.canvas.create_oval(event.x-10, event.y-10, event.x+10, event.y+10, outline="red", width=2, tags="click")self.root.after(200, lambda: self.canvas.delete("click"))def on_right_click(self, event):# 右键点击退出self.root.destroy()def on_drag(self, event):# 拖动宠物self.x = self.root.winfo_x() + event.x - self.width // 2self.y = self.root.winfo_y() + event.y - self.height // 2self.root.geometry(f"+{int(self.x)}+{int(self.y)}")def main():root = tk.Tk()root.config(bg='white') # 设置背景色为白色(透明色)pet = DesktopPet(root)root.mainloop()if __name__ == "__main__":main()
如何运行这个程序
确保你已安装Python(建议Python 3.6或更高版本)
安装必要的依赖库:
pip install pillow
将上面的代码保存为desktop_pet.py
运行程序:
python desktop_pet.py
这个程序不需要任何外部图像文件,所有图形都是使用Pillow库动态生成的,因此可以直接运行而无需额外的资源文件。
相关文章:
电脑桌面太单调,用Python写一个桌面小宠物应用。
下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡,可以响应鼠标点击,并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...
字符串哈希+KMP
P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!
今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等,设置经线、纬线都以10间隔显示。 2、需要插入背会归线…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...
从实验室到产业:IndexTTS 在六大核心场景的落地实践
一、内容创作:重构数字内容生产范式 在短视频创作领域,IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色,生成的 “各位吴彦祖们大家好” 语音相似度达 97%,单条视频播放量突破百万…...
boost::filesystem::path文件路径使用详解和示例
boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类,封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解,包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...

小智AI+MCP
什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析:AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github:https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...
Python爬虫实战:研究Restkit库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...

DAY 45 超大力王爱学Python
来自超大力王的友情提示:在用tensordoard的时候一定一定要用绝对位置,例如:tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾: tensorboard的发展历史和原理tens…...

UE5 音效系统
一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类,将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix,将上述三个类翻入其中,通过它管理每个音乐…...

轻量级Docker管理工具Docker Switchboard
简介 什么是 Docker Switchboard ? Docker Switchboard 是一个轻量级的 Web 应用程序,用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器,使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...
如何通过git命令查看项目连接的仓库地址?
要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...

Linux基础开发工具——vim工具
文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...

边缘计算网关提升水产养殖尾水处理的远程运维效率
一、项目背景 随着水产养殖行业的快速发展,养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下,而且难以实现精准监控和管理。为了提升尾水处理的效果和效率,同时降低人力成本,某大型水产养殖企业决定…...

echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式
pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...

goreplay
1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具,可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长,测试它所需的工作量也会呈指数级增长。GoRepl…...

麒麟系统使用-进行.NET开发
文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...
游戏开发中常见的战斗数值英文缩写对照表
游戏开发中常见的战斗数值英文缩写对照表 基础属性(Basic Attributes) 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...

GraphRAG优化新思路-开源的ROGRAG框架
目前的如微软开源的GraphRAG的工作流程都较为复杂,难以孤立地评估各个组件的贡献,传统的检索方法在处理复杂推理任务时可能不够有效,特别是在需要理解实体间关系或多跳知识的情况下。先说结论,看完后感觉这个框架性能上不会比Grap…...

Canal环境搭建并实现和ES数据同步
作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...

【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...

HTTPS证书一年多少钱?
HTTPS证书作为保障网站数据传输安全的重要工具,成为众多网站运营者的必备选择。然而,面对市场上种类繁多的HTTPS证书,其一年费用究竟是多少,又受哪些因素影响呢? 首先,HTTPS证书通常在PinTrust这样的专业平…...

Python环境安装与虚拟环境配置详解
本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南,适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者,都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献
Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译: ### 胃肠道癌症的发病率呈上升趋势,且有年轻化倾向(Bray等人,2018&#x…...

结构化文件管理实战:实现目录自动创建与归类
手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题,进而引发后续程序异常。使用工具进行标准化操作,能有效降低出错概率。 需要快速整理大量文件的技术用户而言,这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB,…...

云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...
Django RBAC项目后端实战 - 03 DRF权限控制实现
项目背景 在上一篇文章中,我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统,为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...

渗透实战PortSwigger Labs指南:自定义标签XSS和SVG XSS利用
阻止除自定义标签之外的所有标签 先输入一些标签测试,说是全部标签都被禁了 除了自定义的 自定义<my-tag onmouseoveralert(xss)> <my-tag idx onfocusalert(document.cookie) tabindex1> onfocus 当元素获得焦点时(如通过点击或键盘导航&…...

PydanticAI快速入门示例
参考链接:https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...