使用python自制桌面宠物,好玩!——枫原万叶桌宠,可以直接打包成exe去跟朋友炫耀。。。

大家好,我是小黄。

今天我们使用python实现一个桌面宠物。只需要gif动态图片就行。超级简单容易上手。

#完整源代码可在下方图片免费获取

一:下载相关的库文件。

复制代码
我们本次使用到的库文件为:tkinter和pyautogui

下载命令:

复制代码
pip install tkinter 

pip install pyautogui

二.我们把gif导入,放在DestTop.py同级下面即可。

DeskTop.py(不完整的)

复制代码
import tkinter as tk
import pyautogui as pt
import random
import os
from PIL import Image, ImageTk

# 获取主屏幕分辨率
WIDTH, HEIGHT = pt.size()
taskbarHeight = 40

# 将人物大小减少 40%
imgWidth, imgHeight = 670, 550

# 计算右侧10%区域的起始位置
right_margin = int(WIDTH * 0.1)
posX = WIDTH - imgWidth - right_margin  # 右侧10%区域内的初始X位置
posY = 0  # 初始Y位置

# 创建主窗口
root = tk.Tk()
root.geometry(f"{imgWidth}x{imgHeight}+{posX}+{posY}")
root.overrideredirect(1)
root.configure(bg='black')
root.attributes('-transparentcolor', 'black')
root.wm_attributes('-topmost', 1)

# 右键菜单
def create_context_menu(event):
    context_menu.post(event.x_root, event.y_root)

def exit_application():
    root.quit()

context_menu = tk.Menu(root, tearoff=0)
context_menu.add_command(label="退出", command=exit_application)

def load_images(file_path):
    images = []
    try:
        img = Image.open(file_path)
        for frame in range(img.n_frames):  # 使用 Pillow 获取帧数
            img.seek(frame)  # 定位到每一帧
            images.append(ImageTk.PhotoImage(img.copy()))  # 复制当前帧并转换为 PhotoImage
    except Exception as e:
        print(f"Error loading frames from {file_path}: {e}")
    return images

# 获取当前脚本的目录
current_dir = os.path.dirname(os.path.abspath(__file__))

# 更新 GIF 文件路径
idleRight = load_images(os.path.join(current_dir, "bar.gif"))
idleLeft = load_images(os.path.join(current_dir, "bar1.gif"))
runRight = load_images(os.path.join(current_dir, "bar1.gif"))
runLeft = load_images(os.path.join(current_dir, "bar3.gif"))
fall = load_images(os.path.join(current_dir, "bar1.gif"))

status = {
    0: fall,
    1: idleRight,
    2: idleLeft,
    3: runRight,
    4: runLeft
}
status_num = 0

canvas = tk.Canvas(root, width=imgWidth, height=imgHeight, bg='black', highlightthickness=0)
canvas.pack()

player = canvas.create_image(imgWidth // 2, imgHeight // 2, image=idleLeft[0])

# 说话文本列表
phrases = [
    "海鸥别叫啦,从今天起,我也是漂泊者啊",
    "深山踏红叶,耳畔闻鹿鸣",
    "可叹,落叶飘零",
    "我很喜欢枫叶,可惜,枫叶红时,总多离别。",
    "拾花鸟之一趣,照月风之长路",
    "闲聊?自然!"
]

def changeStatus():
    global status_num
    status_num = random.randint(1, 4)
    root.after(random.randint(1000, 5000), changeStatus)

def falling():
    global status_num, posY
    if root.winfo_y() + imgHeight < HEIGHT - taskbarHeight:
        status_num = 0
        posY += 10  # 增加每次掉落的高度
        root.geometry(f"{imgWidth}x{imgHeight}+{posX}+{posY}")
    elif root.winfo_y() + imgHeight >= HEIGHT - taskbarHeight and status_num == 0:
        status_num = 1
    root.after(10, falling)  # 保持掉落速度

运行效果:

打包为exe可执行文件:

复制代码
pyinstaller --onefile --noconsole --exclude-module numpy --exclude-module pandas --add-data "您的绝对路径\\bar.gif;." --add-data "您的绝对路径\\bar1.gif;." --add-data "您的绝对路径\\bar2.gif;." --add-data "您的绝对路径\\bar3.gif;." DestTop.py

完整源代码和gif资料包请下方获取👇↓↓↓

相关推荐
天竺鼠不该去劝架7 分钟前
AI幻觉引发业务风险?企业智能体执行层隔离解决方案
经验分享
DeepVisionary17 分钟前
谷歌 Gemini Omni 1.1 Flash 正式发布:4K 视频、40 秒场景延伸,视频生成进入按 token 计费时代
python·自动化
知产xiao_xin34 分钟前
知识产权入门 —— 相关权(邻接权)
经验分享·笔记·知识产权
阡之尘埃42 分钟前
Python数据分析案例85——大模型微调全流程(SFT的LoRA微调)
人工智能·python·深度学习·语言模型·llm·微调·千问
Regentsoft丽晶软件44 分钟前
品牌方新品上市促销政策无法实时同步经销商,有没有支持总部-经销商-终端一站式的分销解决方案?
人工智能·经验分享·数据库架构
海兰1 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(三)
javascript·python·金融
EXI-小洲1 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
cvcode_study1 小时前
Ollama+ComfyUI 多模态
大数据·人工智能·python
会周易的程序员1 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导1 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt