桌面宠物 ① 通过python制作属于自己的桌面宠物

一、桌面宠物素材

1.1 需要准备什么素材

桌面宠物的各种动画效果,可以看作是由一个个GIF动图拼接而成,我们需要准备多组GIF动图来实现桌面宠物的动作切换。

最好选取是白底的GIF动图。

1.2 介绍几种获得GIF动图的方式

1.2.1 通过pr实现视频转GIF

pr在导出的时候选择动画GIF可以直接导出GIF动图。

当然了想要白底就需要自已用“蒙版”和画笔工具自己抠图了。

1.2.2 通过ps实现图片组转GIF

ps会高级一点,首先点击最上方的窗口,再点击时间轴,在下方显示出的时间轴的最右边的加号可以添加你想要添加的图片。图层右边可以选择删除背景。

然后选择最上方的文件,选择导出,选择导出为web所用格式旧版,即可

1.2.3 百度一下,获取网上现成的GIF资源

① 百度:“制作GIF动图”

② 百度“GIF动图资源”

你想要的角色人物素材都在这里!最实用的2d游戏素材! - 知乎

二、python实现代码

2.1 目录结构

项目的目录结构整体如下:main.py为主程序代码。

normal下的GIF图是宠物平常会随机切换的动作GIF图,click下面的GIF图是点击宠物之后的宠物动作的GIF图

dialog.txt 记录了宠物的对话信息

tigerIcon.jpg是缩小到托盘后托盘图标的图片

2.2 实现代码

2.2.1 引用包

os包用于加载文件,sys包用于退出程序,random包用于程序中一些需要调用随机数的操作。其他的三个包则是用于实现桌面宠物的基础。

import os
import sys
import random
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

2.2.2 主代码部分

if __name__ == '__main__':
    # 创建了一个QApplication对象,对象名为app,带两个参数argc,argv
    # 所有的PyQt5应用必须创建一个应用(Application)对象。sys.argv参数是一个来自命令行的参数列表。
    app = QApplication(sys.argv)
    # 窗口组件初始化
    pet = DesktopPet()
    # 1. 进入时间循环;
    # 2. wait,直到响应app可能的输入;
    # 3. QT接收和处理用户及系统交代的事件(消息),并传递到各个窗口;
    # 4. 程序遇到exit()退出时,机会返回exec()的值。
    sys.exit(app.exec_())

2.2.3 代码运行流程

整个运行流程为:

(1)通过self.init():实现窗体的初始化,宠物的GIF图在这个窗体中播放。

(2)通过self.initPall():配置托盘化

(3)通过self.initPetImage():将宠物的静态GIF资源,包括对话和GIF动图进行加载

(4)通过self.petNormalAction():实现宠物随机切换动作和语句的功能

class DesktopPet(QWidget):
    def __init__(self, parent=None, **kwargs):
        super(DesktopPet, self).__init__(parent)
        # 窗体初始化
        self.init()
        # 托盘化初始
        self.initPall()
        # 宠物静态gif图加载
        self.initPetImage()
        # 宠物正常待机,实现随机切换动作
        self.petNormalAction()

① 加载显示GIF动图的窗体,通过函数init实现,其代码配置如下:

这几句的作用是对展示宠物的窗体进行一些初步的设置,使得白色GIF图能够去掉背景的白色,将GIF图透明的展示出来

    # 窗体初始化
    def init(self):
        # 初始化
        # 设置窗口属性:窗口无标题栏且固定在最前面
        # FrameWindowHint:无边框窗口
        # WindowStaysOnTopHint: 窗口总显示在最上面
        # SubWindow: 新窗口部件是一个子窗口,而无论窗口部件是否有父窗口部件
        # https://blog.csdn.net/kaida1234/article/details/79863146
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.SubWindow)
        # setAutoFillBackground(True)表示的是自动填充背景,False为透明背景
        self.setAutoFillBackground(False)
        # 窗口透明,窗体空间不透明
        self.setAttribute(Qt.WA_TranslucentBackground, True)
        # 重绘组件、刷新
        self.repaint()

② 实现能托盘显示的功能,通过函数initPall实现,其代码配置如下:

主要有下面这几个操作:

(1)读取静态图片资源设置托盘化的图标

(2)设置托盘化图片点击右键显示的菜单,并对这些菜单的点击操作进行设置

流程代码如下:

 # 托盘化设置初始化
    def initPall(self):
        # 导入准备在托盘化显示上使用的图标
        icons = os.path.join('t
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值