今天,我们来分享一个宠物桌面小程序,全程都是通过 PyQT 来制作的,对于 Python GUI 感兴趣的朋友,千万不要错过哦!

我们先来看看最终的效果,对于一个小小的娱乐项目来说,还是不错啦!

本文灵感和部分代码来源于一篇知乎文章,感兴趣的朋友可以访问如下链接[1]

好了,废话不多说,我直接上干货,本项目使用 PYQT5 作为编码框架,如果你对于该框架不是特别熟悉的话,建议先去简单学习一下~

获取素材图片

对于素材图片,我这里也是使用的一款国外的 APP,叫做 shimeji,感兴趣的朋友可以下载体验下。

萝卜哥已经下载好了很多素材,如果需要,文末有获取方式

窗体设置

首先我们先初始化一个 GUI 窗体

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qtclass DesktopPet(QWidget):tool_name = '桌面宠物'def __init__(self, parent=None, **kwargs):super(DesktopPet, self).__init__(parent)self.index = 0self.show()

接下来,由于我们需要只展示图片素材部分,所以还需要对该 GUI 窗体进行属性设置

# 含义分别是设置窗口无边框,窗口始终处于顶层位置,窗口无按钮
self.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint|Qt.SubWindow)
self.setAutoFillBackground(False)
self.setAttribute(Qt.WA_TranslucentBackground, True)
self.repaint()
self.resize(128, 128)

接下来我们导入一个图片,查看效果

# 导入宠物
image = QImage()
image.load(os.path.join("resources", "30", 'shime1.png'))
self.image = QLabel(self)
self.setImage(image)self.show()

效果如下:

可以看到,一个简易的不会动的宠物已经出现了,后面的工作就是把下载好的所有素材全部导入,并随机展示即可

随机展示宠物图片

我们先编写一个导入图片的函数

"""导入图像"""
def loadImage(self, imagepath):image = QImage()image.load(imagepath)return image

该函数可以将本地的图片,导入为 QImage 类型

接下来再编写一个导入全部图片素材的函数

def loadPetImages(self):actions = self.action_distributionpet_images = []for action in actions:pet_images.append([self.loadImage(os.path.join("resources", "30", 'shime' + item + '.png')) for item in action])iconpath = os.path.join("resources", "30", 'shime1.png')return pet_images, iconpath

然后我们在初始化函数中调用该函数即可

# 导入宠物
self.pet_images, iconpath = self.loadPetImages()
self.image = QLabel(self)
self.setImage(self.pet_images[0][0])

这样,我们就把文件夹30下面的所有素材图片都导入了,并且设置第一张图片为开始的图片

添加动作

对于一个桌面宠物来说,没有都做怎么能行呢

这里的动作分为两种

  • 图片切换

  • 上下移动

我们先来看图片切换,先定义一个动作函数

def randomAct(self):self.pet_images, iconpath = self.loadPetImages()if not self.is_running_action:self.is_running_action = Trueself.action_images = random.choice(self.pet_images)self.action_max_len = len(self.action_images)self.action_pointer = 0self.runFrame()def runFrame(self):if self.action_pointer == self.action_max_len:self.is_running_action = Falseself.action_pointer = 0self.action_max_len = 0self.setImage(self.action_images[self.action_pointer])self.action_pointer += 1

上面的代码就是随机选取素材图片切换,这样就达到了让宠物“动起来”的效果了

当然还需要设置一个间隔时间,不要使得图片切换的太快

"""普通动作"""
def commonAction(self):# 每隔一段时间做个动作self.timer_common = QTimer()self.timer_common.timeout.connect(self.randomAct)self.timer_common.start(500)

再来看看上下移动

对于上下移动,我们需要计算当前窗体所在位置,然后一段时间给予一定的位移量,此时只需要注意好控制上下边界,不要让图片移动出屏幕

"""上下移动"""
def selfMoveAction(self):try:if self.flag_up:if self.pos().y() - self.pet_geo_height/2 > -70:self.move(QPoint(self.position.x(), self.position.y()-5))self.position = QPoint(self.position.x(), self.position.y()-5)else:self.flag_up = Falseelif not self.flag_up:if self.pos().y() + self.pet_geo_height/2 < 700:self.move(QPoint(self.position.x(), self.position.y() + 50))self.position = QPoint(self.position.x(), self.position.y() + 50)else:self.flag_up = Trueexcept Exception as e:print(e)

右键菜单

对于该桌面宠物,我们还定义了四个右键菜单,分别为移动、停止、睡觉,退出

"""右键菜单函数"""
def rightMenu(self):self.myMenu = QMenu(self)self.actionA = QAction(QIcon("移动"), "移动", self)self.actionA.triggered.connect(self.moveUpDown)self.actionB = QAction(QIcon("停止"), "停止", self)self.actionB.triggered.connect(self.moveStop)self.actionC = QAction(QIcon("睡觉"), "睡觉", self)self.actionC.triggered.connect(self.moveSleep)self.actionD = QAction(QIcon("退出"), "退出", self)self.actionD.triggered.connect(self.quit)self.myMenu.addAction(self.actionA)self.myMenu.addAction(self.actionB)self.myMenu.addAction(self.actionC)self.myMenu.addAction(self.actionD)self.myMenu.popup(QCursor.pos())

对于右键菜单绑定的动作函数,定义如下

def moveUpDown(self):self.move_timer.start(100)self.up_down = Trueself.timer_common.start(500)self.timer_sleep.stop()

当点击对应的菜单项时,则把对应的标志位设置为True

这里还需要注意一点是,在进行移动判断的时候,需要以多线程的方式

"""多线程,判断是否上下移动"""
def upAndDown(self):if self.up_down:self.stop_threads = Falset = Thread(target=self.do, args={})t.start()else:self.stop_threads = True

OK,以上就是主要代码,感兴趣的小伙伴可以自行尝试一下哦

如果需要素材图片,可以在公众号后台回复“宠物素材”获取,如果对于如何获取所有的素材感兴趣,就点个在看哈,数量足够多,咱们下期就分享!

好了,今天的分享就到这里,喜欢就点个吧~

参考资料

[1]

知乎资料: https://zhuanlan.zhihu.com/p/125693970。

推荐阅读:

入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径

干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影

趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!

AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影

小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|

年度爆款文案
1).卧槽!Pdf转Word用Python轻松搞定!
2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃
3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密
4).80行代码!用Python做一个哆来A梦分身
5).你必须掌握的20个python代码,短小精悍,用处无穷
6).30个Python奇淫技巧集
7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货
8).再见Python!我要学Go了!2500字深度分析!
9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片点阅读原文,看B站50个Python实战视频!

用 Python 制作一个桌面宠物,好玩!相关推荐

  1. 用 Python 制作一个桌面宠物,好玩

    今天,我们来分享一个宠物桌面小程序,全程都是通过 PyQT 来制作的,对于 Python GUI 感兴趣的朋友,千万不要错过哦! 我们先来看看最终的效果,对于一个小小的娱乐项目来说,还是不错啦! 本文 ...

  2. 基于C#制作一个桌面宠物

    此文主要基于C#制作一个桌面宠物,可自定义宠物素材图片及打开外部exe的快捷菜单. 实现流程 1.1.创建项目 1.2.准备素材 1.3.控件设置 (1)PictureBox控件 (2)timer控件 ...

  3. python制作一个桌面小工具

    python实现一个桌面小工具,制作一个桌面的便签提醒工具 参考代码:https://github.com/cosven/memo 参考链接:https://www.jb51.net/article/ ...

  4. python小工具开发_使用Python制作一个桌面小工具

    今天,我们制作一个有意思的小工具,利用Python获取历史上的今天发生的事情. [分析] 个人总结了一下,"历史上的今天"有很多调用接口.有很多调用接口都是收费的或者就是免费但限制 ...

  5. 如何用unity制作一个桌面宠物?

    unity版本为:2018.3.14 1.找到带动画模型 获取途径: ① unity官方有免费模型和付费模型. ② 有mmd转unity的转换器. 我使用的是"Little Heroes M ...

  6. python软件桌面图标_python制作一个桌面便签软件

    # 2014.10.15 更新了memo.zip, 网盘的exe:修复:1.隔日启动不能正常加载json,加入:1.隐藏任务栏图标,2.通过垃圾桶进行窗口移动. # 2014.10.8 10.36更新 ...

  7. 用Python实现自制桌面宠物,变出一个桌面小挂件

    前言 就喜欢自己自定义一些小玩意,今天就来分享一些制作桌面宠物的素材,还有代码 相关文件 声明:图片素材源于网络,侵歉删. 开发工具 Python版本:3.6.4 相关模块: PyQt5模块: 以及一 ...

  8. python开发rpa_几步教你用 Python 制作一个 RPA 机器人!

    原标题:几步教你用 Python 制作一个 RPA 机器人! 作者 | 阿文 出品 | CSDN(ID:CSDNnews) 头图 | CSDN下载自东方IC 繁琐且重复的工作 在我们日常的工作中,有很 ...

  9. python制作解压工具_使用python制作一个解压缩软件

    python实现解压缩的重要模块就是--zipfile,其次是os 安装zipfile模块 首先得安装zipfile模块,打开cmd输入一下命令即可安装 pip install zipfile os是 ...

最新文章

  1. Linux系统挂载操作mount详解
  2. Day25 与类相关的魔术方法
  3. 羲云社区团购微信小程序多门店版,首页开发
  4. python插值算法_python插值算法
  5. IT30:30岁IT男未来10年规划第1篇(2009-2020)
  6. CSS案例——静态网页制作
  7. ps 去除gif水印
  8. 股市入门:应对股市涨跌方法
  9. 5.0安装没有costom mysql_MySql5.0安装图解s
  10. RK平台RAM和ROM容量计算
  11. cad多段线画圆弧方向_(cad多段线画圆弧方向)在cad中如何使用excel画样条曲线
  12. 网络电视视频服务器所放位置,同样带宽,为什么用电视上的网络电视app看电视就卡,用运营商自己的iptv就不卡呢?...
  13. java+上传一个文件夹
  14. SQL: 第二高的薪水
  15. 数据分析为什么要学Excel
  16. 第13期 《万物并作,吾以观复》
  17. C ++程序将给定的英寸转换为等效的码,英尺和英寸
  18. FPGA的设计艺术(7)STA实战之SmartTime时序约束及分析示例(II)
  19. js判断识别微信或QQ浏览器
  20. maven下载文件后缀lastedupdated

热门文章

  1. 浅谈“脆弱的SSL加密算法“
  2. 在iOS或Android中集成Caffe2
  3. 基于Springboot的聊天室Web系统设计
  4. xenserve使用ISOr创建VM
  5. 征途linux编译错误,Linux征途:每天一个linux命令
  6. viterbi matlab仿真,通信系统中Viterbi译码的Matlab仿真与实现
  7. 高级运维需要掌握的技能知识点
  8. 成绩排名 (C语言)
  9. 淘派上架预告 | Lulu.z 作品 2022 幸运光符
  10. [年终总结]过去,现在,未来