首页 > 编程语言 >用 Python 制作一个桌面宠物,好玩!

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

时间:2024-09-30 11:23:59浏览次数:11  
标签:桌面 Python self 宠物 images action def

 

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

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

如果你正在学习Python并且找不到方向的话可以试试我这一份学习方法+籽料呀! 点击 领取(不要米米)

好了,废话不多说,我直接上干货,本项目使用 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])

这样,我们就把文件夹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

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

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

"""普通动作"""
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 web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

① Python所有方向的学习路线图,清楚各个方向要学什么东西

② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析

③ 100多个Python实战案例,学习不再是只会理论

④ 华为出品独家Python漫画教程,手机也能学习

⑤ 历年互联网企业Python面试真题,复习时非常方便****

标签:桌面,Python,self,宠物,images,action,def
From: https://blog.csdn.net/2401_86168842/article/details/142617554

相关文章

  • 天哪!用Python实现自动驾驶!
    一、安装环境gym是用于开发和比较强化学习算法的工具包,在python中安装gym库和其中子场景都较为简便。安装gym:pip install gym安装自动驾驶模块,这里使用EdouardLeurent发布在github上的包highway-env(链接:https://github.com/eleurent/highway-env):pip install --user......
  • 11招秘籍,用Python下载文件!
    今天我们一起学习如何使用不同的Python模块从web下载文件。此外,你将下载常规文件、web页面、AmazonS3和其他资源。如果你正在学习Python并且找不到方向的话可以试试我这一份学习方法+籽料呀!点击领取(不要米米) 最后,你将学习如何克服可能遇到的各种挑战,例如下载重定向的......
  • CentOS 7.6无脑安装Python 3.11.9
    更新系统软件包:运行以下命令来更新系统上的所有软件包:sudoyumupdate-ysudoyumgroupinstall-y"DevelopmentTools"sudoyuminstall-ybzip2-develexpat-develgdbm-devel\ncurses-developenssl-develreadline-devel\sqlite-develzlib-develxz-develli......
  • 在MAC OS 下配置python + Flask ,并支持pyCharm编辑器
    在MACOS下配置python+Flask,并支持pyCharm编辑器 原创咯~    flask是一个microframework,伸缩性很强。可以部署到openshift的PAAS里。这个框架上手非常快。喜欢的可以试试。  若实在MAC里,python已经默认安装了。10.9的系统安装的是2.7.5的版本。所以我们这......
  • 完全零基础 轻松学Python:基本语法元素和函数
    一、基本语法元素01缩进02注释03保留字04变量05数据类型06赋值07函数二、几个常见函数01input()02print()03eval()04type()05id()06dir()07help()-TheEnd -......
  • Python画笔案例-070 绘制通电棒棒
    1、绘制通电棒棒通过python的turtle库绘制通电棒棒,如下图:2、实现代码 绘制通电棒棒,以下为实现代码:"""通电棒棒.py注意亮度为0.5的时候最鲜艳本程序需要coloradd模块支持,安装方法:pipinstallcoloradd程序运行需要很长时间,请耐心等待。可以......
  • springboot宠物智慧医院-计算机毕业设计源码-计算机毕业设计源码99362
     目录摘要1绪论1.1选题背景与意义1.2国内外研究现状1.3微信开发者工具1.4小程序框架以及目录结构介绍1.5论文结构与章节安排2系统分析2.1可行性分析2.2系统流程分析2.2.1系统开发流程2.2.2用户登录流程2.2.3系统操作流程2.2.4添加信息流程......
  • python复习
    函数可以作为参数传递给其他函数——传递的是计算逻辑而不是数据defnewFunc(oldFunc):oldFunc(a,b)fromtimeimport*这个*收到time中的__all__=[]控制,如果函数不再all中就无法使用,但可以自行import函数进行使用对集合的遍历s[::-1]就是逆序遍历,可以省略最后的-1,表......
  • 基于django+Python的考研学习系统的设计与实现(源码+文档+部署讲解等)
    前言......
  • 基于django+Python的华为产品销售的数据爬虫与可视化分析系统(源码+文档+部署讲解等)
    前言......