首页 > 分享 > 用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()

接下来,由于我们需要只展示图片素材部分,所以还需要对该 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_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

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

# 导入宠物

self.pet_images, iconpath = self.loadPetImages()

self.image = QLabel(self)

self.setImage(self.pet_images[0][0])

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

添加动作

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

这里的动作分为两种

图片切换

上下移动

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

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

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

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

"""普通动作"""

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 = 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)

右键菜单

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

"""右键菜单函数"""

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 = True

self.timer_common.start(500)

self.timer_sleep.stop()

当点击对应的菜单项时,则把对应的标志位设置为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

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

相关知识

用 Python 制作一个桌面宠物,好玩
用 Python 制作一个桌面宠物,好玩!
怎么用Python制作一个可以聊天的皮卡丘版桌面宠物
【Python程序】用200行Python代码制作有趣的桌面宠物(源码可分享),大打工人解压放松程序,如何用Python制作一个桌面宠物!
用Python制作桌面宠物
用Python制作一个可以聊天的皮卡丘版桌面宠物
用Python实现自制桌面宠物,变出一个桌面小挂件
python如何制作桌面宠物
用Python制作一个桌面宠物,真好玩!
基于C#制作一个桌面宠物

网址: 用Python制作一个桌面宠物,好玩! https://m.mcbbbk.com/newsview1036760.html

所属分类:萌宠日常
上一篇: 2024有趣的电子宠物游戏有哪几
下一篇: 仙剑世界什么宠物好玩最厉害 仙剑