用Python做个“冰墩墩雪容融”桌面部件(好玩又有趣)

桌面太单调?今天就带大家,一起用Python的PyQt5开发一个有趣的自定义桌面动画挂件,看看实现的动画挂件效果!

下面,我们开始介绍这个自定义桌面动画挂件的制作过程。

一、核心功能设计

实现将动态图gif或视频转成一个桌面动画挂件,知识点主要涉及了对GIF图/视频解析,人像提取分割,PyQt5窗体设置,自定义挂件动画实现,ico图标生成,程序打包等。

拆解需求,大致可以整理出我们需要分为以下几步完成:

1.对gif或者视频进行逐帧解析,获取转换的图片,提取图像中人体区域,并对图片进行批量尺寸大小修改替换
2.初始化设置动画挂件窗体显示效果,窗体位置、大小等
3.桌面动画挂件功能实现,动画轮播、鼠标控制挂件位置拖动
4.挂件打包图标设置、打包配置

二、实现步骤

  1. 解析提取,修改图片

GIF图解析:

首先我们需要将Gif逐帧进行解析 ,转换成图片格式。代码如下:

from PIL import Image  # 导入PIL的Image包  
import os  
gifFileName = "./demo.gif"  # 把gif图赋值给gifFileName  
im = Image.open(gifFileName)  # 使用Image的open函数打开test.gif图像  
pngDir = gifFileName[:-4]  # 倒着从gifFileName中的倒数第四个开始取字符(跳过.gif),赋值给pngDir,作为文件夹的名字  
if not os.path.exists(pngDir):  
    os.makedirs('./img')  # 用图片名创建一个文件夹,用来存放每帧图片,名字为pngDir的值  
  
try:  
  while True:  # 死循环  
    current = im.tell()  # 用tell函数保存当前帧图片,赋值给current  
    im.save(pngDir+'/'+str(current+1)+'.png')  # 调用save函数保存该帧图片  
    im.seek(current+1)  # 调用seek函数获取下一帧图片,参数变为current帧图片+1  
    # 这里再次进入循环,当为最后一帧图片时,seek会抛出异常,代码执行except  
except EOFError:  
    pass  # 最后一帧时,seek抛出异常,进入这里,pass跳过  

gif逐帧转为图片,效果如下:

在这里插入图片描述

视频解析:

对视频解析,也是逐帧进行解析,转换成若干张图片,代码如下:

# 将视频按照每一帧转成图片png  
import cv2  
videoFileName = "./demo.mp4"  # 把视频路径赋值给videoFileName  
pngDir = videoFileName[:-4]  # 倒着从gifFileName中的倒数第四个开始取字符(跳过.后缀),赋值给pngDir,作为文件夹的名字  
if not os.path.exists(pngDir):  
    os.makedirs(pngDir)  # 用图片名创建一个文件夹,用来存放每帧图片,名字为pngDir的值  
# 视频处理 分割成一帧帧图片  
cap = cv2.VideoCapture(videoFileName)  
num = 1  
while True:  
    # 逐帧读取视频  按顺序保存到本地文件夹  
    ret, frame = cap.read()  
    if ret:  
        cv2.imwrite(f"{pngDir}/{num}.png", frame)  # 保存一帧帧的图片  
        num += 1  
    else:  
        break  
cap.release()   # 释放资源  

桌面小部件功能

初始化动画部件

# 窗体初始化  
def windowinit(self):  
    self.x = 1650  
    self.y = 860  
    self.setGeometry(self.x, self.y, 300, 300)  
    self.setWindowTitle('My Gadgets')  
    self.img_num = 1  
    self.img_path = './image/{file}/{img}.png'.format(file=self.dis_file, img=str(self.img_num))  
    self.lab = QLabel(self)  
    self.qpixmap = QPixmap(self.img_path)  
    self.lab.setPixmap(self.qpixmap)  
    self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.SubWindow)  
    self.setAutoFillBackground(False)  
    self.setAttribute(Qt.WA_TranslucentBackground, True)  
    self.show()  
  
def __init__(self):  
    super(Gadgets, self).__init__()  
  
    self.dis_file = "img1"  
    self.windowinit()  
    self.icon_quit()  
  
    self.pos_first = self.pos()  
    self.img_count = len(os.listdir('./image/{}'.format(self.dis_file)))  

这样只是完成了图片的静态显示,下面我们来完成图片的动态轮播效果

动画轮播:

self.timer = QTimer()  
self.timer.timeout.connect(self.img_update)  
self.timer.start(100)  
def img_update(self):  
    if self.img_num < self.img_count:  
        self.img_num += 1  
    else:  
        self.img_num = 1  
    self.img_path = './image/{file}/{img}.png'.format(file=self.dis_file, img=str(self.img_num))  
    self.qpixmap = QPixmap(self.img_path)  
    self.lab.setPixmap(self.qpixmap)  

鼠标控制挂件位置拖动:

def mousePressEvent(self, QMouseEvent):  
    if QMouseEvent.button() == Qt.LeftButton:  
        self.pos_first = QMouseEvent.globalPos() - self.pos()  
        QMouseEvent.accept()  
        self.setCursor(QCursor(Qt.OpenHandCursor))  
  
def mouseMoveEvent(self, QMouseEvent):  
    if Qt.LeftButton:  
        self.move(QMouseEvent.globalPos() - self.pos_first)  
        print(self.pos())  
        self.x, self.y = self.pos().x, self.pos().y  
        QMouseEvent.accept()  
  
def quit(self):  
    self.close()  
    sys.exit()  

到此为止,桌面小部件已开发完成。

可以使用将程序打包为exe可执行文件直接发给你的朋友,这样就不用安装python环境了。

Python是一门非常不错的编程语言,薪资待遇高、就业前景好。即使你不想出去上班,也可以利用Python在家做兼职(比如爬取客户需要的数据、量化交易、代写程序等)。

如果你对Python感兴趣,想通过学习Python获取更高的薪资,那下面这套Python学习资料一定对你有用!

资料包括:Python安装包+激活码、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等学习教程。0基础小白也能听懂、看懂,跟着教程走,带你从零基础系统性地学好Python!

学习资源推荐

除了上述分享,如果你也喜欢编程,想通过学习Python获取更高薪资,这里给大家分享一份Python学习资料。

这里给大家展示一下我进的兼职群和最近接单的截图

兼职群

私单

😝朋友们如果有需要的话,可以V扫描下方二维码联系领取,也可以内推兼职群哦~

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

### 1.Python学习路线

image-20230619144606466

python学习路线图1

2.Python基础学习
01.开发工具

02.学习笔记

在这里插入图片描述

03.学习视频

在这里插入图片描述

3.Python小白必备手册

图片

4.数据分析全套资源

在这里插入图片描述

5.Python面试集锦
01.面试资料

在这里插入图片描述

在这里插入图片描述

02.简历模板

在这里插入图片描述

因篇幅有限,仅展示部分资料,添加上方即可获取👆

------ 🙇‍♂️ 本文转自网络,如有侵权,请联系删除 🙇‍♂️ ------

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值