首页 > 分享 > 用Python制作一个专属桌宠,确定不来一只?保姆级教程,小白也能学会!!

用Python制作一个专属桌宠,确定不来一只?保姆级教程,小白也能学会!!

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

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

获取素材图片

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

图片

窗体设置

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

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

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

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

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

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

效果如下:

图片

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

随机展示宠物图片

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

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

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

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

def loadPetImages(self): actions = self.action_distribution pet_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 123456789

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

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

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

添加动作

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

这里的动作分为两种

图片切换上下移动

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

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

1234567891011121314151617

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

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

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

再来看看上下移动

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

"""上下移动""" 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 = False elif 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 = True except Exception as e: print(e)

123456789101112131415161718

右键菜单

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

"""右键菜单函数""" 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())

1234567891011121314151617

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

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

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

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

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

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

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

关于Python学习指南

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

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末 Python70个实战练手案例&源码

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取

在这里插入图片描述

相关知识

【Python教程】教你用Python代码制作一个桌面宠物,专属桌宠,体验感升级1000%(附源码)
【stablediffusion】AI变现新玩法!用SD制作创意宠物写真,无需复杂操作,0成本月入过万!AI绘画教程,AI摄影教学
教程篇|画猫咪耳朵干货 小白也能学的教程
用Python制作桌宠,嘿咻~
可爱到爆炸!一个教程教会你如何用Stable Diffusion生成可爱萌宠照片
AI创意萌宠照,你家宠物也能出科幻大片!
攻略』保姆级萌宠养育教程
训犬师经验分享,一天一个训练技巧,小白也能成为训犬大师
保姆级定点排泄教程
用 Python 制作一个桌面宠物,好玩!

网址: 用Python制作一个专属桌宠,确定不来一只?保姆级教程,小白也能学会!! https://m.mcbbbk.com/newsview316231.html

所属分类:萌宠日常
上一篇: 宠物定制|你好博美❤️
下一篇: 蔓越莓宠物,饼干制作教程