用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])

这样,我们就把文件夹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 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

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

👉Python所有方向的学习路线👈

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

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 制作桌宠的思路大概是这样的:先创建一个窗口,然后在窗口中放置一个小动画或者图片,让它随着鼠标移动而移动。Python 中可以使用 Pygame 库来实现这个功能。 以下是一个简单的桌宠程序示例: ```python import pygame pygame.init() # 窗口大小 WINDOW_WIDTH = 800 WINDOW_HEIGHT = 600 # 定义颜色 WHITE = (255, 255, 255) BLACK = (0, 0, 0) # 创建窗口 screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT)) pygame.display.set_caption("我的桌宠") # 加载图片 img_path = "pet.png" img = pygame.image.load(img_path) img_width, img_height = img.get_rect().size # 宠物位置 pet_pos_x = 0 pet_pos_y = 0 # 游戏循环 running = True while running: # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 获取鼠标位置 mouse_pos_x, mouse_pos_y = pygame.mouse.get_pos() # 计算宠物位置 pet_pos_x = mouse_pos_x - img_width // 2 pet_pos_y = mouse_pos_y - img_height // 2 # 绘制背景 screen.fill(WHITE) # 绘制宠物 screen.blit(img, (pet_pos_x, pet_pos_y)) # 更新窗口 pygame.display.update() pygame.quit() ``` 这个示例程序中,我们先创建了一个窗口,并加载了一张图片作为桌宠。在游戏循环中,获取鼠标位置,并计算出宠物的位置,然后在窗口中绘制宠物。最后更新窗口,完成桌宠的绘制。 ### 回答2: 使用Python制作一个桌宠可以通过以下几个步骤实现: 1. 引入必要的库:在开始之前,需要导入一些Python库来实现桌宠的功能。例如,可以使用Tkinter库来创建图形用户界面,使用Pillow库来处理图像,使用playsound库来播放声音等。 2. 创建桌宠窗口:使用Tkinter库创建一个空的窗口作为桌宠的显示界面。可以根据自己的喜好来设置窗口的大小、标题等属性。 3. 加载桌宠素材:用Pillow库加载桌宠图片素材。可以使用Image类来加载和显示桌宠的不同状态,例如正常状态、休息状态、跳舞状态等。 4. 实现桌宠行为:使用Tkinter库的event循环,通过捕获鼠标点击、键盘事件等用户操作,来控制桌宠的行为。例如,点击桌宠时可以让它做一个动作,按下键盘时可以播放一段声音等。 5. 控制桌宠动画:使用Tkinter库的after方法来定期更新桌宠的动画。可以创建一个函数,每隔一段时间调用一次,用来更新桌宠图片素材以创建动画效果。可以通过改变图片的位置、大小、旋转等属性让桌宠动起来。 6. 添加交互功能:为了让桌宠与用户进行交互,可以添加一些功能,例如点击桌宠时弹出一个对话框,接收用户的输入,并根据输入做出相应的反应。 7. 优化和扩展:完成基本的桌宠功能后,可以进一步优化代码,使得程序更加高效、稳定。同时,也可以尝试添加更多有趣的功能,例如给桌宠添加衣服、道具等,让用户可以自定义桌宠的外观和行为。 总之,使用Python制作一个桌宠需要熟悉相关的库和模块,通过合理的设计和编程来实现桌宠的各种功能。同时,也可以根据自己的想法和创造力,添加一些个性化的功能,使得桌宠更加有趣和有吸引力。 ### 回答3: 要使用Python制作一个桌宠,可以按照以下步骤进行: 1. 安装Python:首先,需要在计算机上安装Python。可以从Python官方网站上下载并安装最新版本的Python。 2. 导入必要的库:为了创建桌宠,需要使用特定的库,如Tkinter用于GUI界面和Pygame用于动画效果。可以使用命令`pip install`来安装这些库。 3. 创建GUI界面:使用Tkinter库创建一个空白窗口,作为桌宠的容器。可以设置窗口的大小和标题,以及背景色和透明度等属性。 4. 添加图像:在窗口中添加桌宠的图像,可以使用PNG或JPEG格式的图像文件。可以使用Python中的`PhotoImage`类加载图像文件,并使用`Label`类将图像添加到窗口中。 5. 响应事件:为了使桌宠具有互动功能,可以添加事件处理程序。例如,可以在点击桌宠图像时,执行一些特定的动作,如播放声音或显示对话框。 6. 添加动画效果:使用Pygame库可以为桌宠添加动画效果。可以定义不同的动作帧,并在循环中连续切换帧,以产生动画效果。例如,可以模拟桌宠的呼吸或移动。 7. 设置定时器:为了使桌宠看起来更生动,可以设置定时器来定期执行一些动作,如变换表情或抖动。可以使用Python中的`time`模块设置定时器,并定义回调函数来执行相应的动作。 8. 打包和分发:完成桌宠的设计和开发后,可以使用Python的打包工具打包应用程序,并分享给其他人使用。 通过以上步骤,使用Python可以轻松制作一个简单的桌宠。当然,如果希望桌宠具有更多功能和特效,还可以进一步研究和学习更高Python技术和库。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值