当前位置: 首页 > article >正文

Python 二次元初音未来桌宠

标题

相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢,点个关注不迷路!!!

1. 简介:

今天用代码实现了一个桌面宠物的应用,基于PyQt5,具备以下功能:

  1. 桌宠图像动画:桌宠通过显示一系列图片(模拟GIF效果)来表现动态。
  2. 桌宠拖动:支持鼠标拖动桌宠到屏幕的任意位置。

右键菜单:

  • 打开浏览器。
  • 打开音乐播放器(如网易云音乐)。
  • 隐藏显示桌宠。
  • 退出程序。

系统托盘:

  • 支持通过系统托盘菜单显示或退出桌宠。

运行要求

文件路径配置:

  • 确保图片路径 image/meizi/meizi_ (…).png 存在,并且图片编号是连续的(从1到61)。 修改os.startfile 路径为实际的浏览器和音乐播放器路径。 依赖库:
  • 安装 PyQt5:pip install PyQt5

2. 运行效果:

在这里插入图片描述
在这里插入图片描述

3. 相关源码:

i

mport sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import os

class Sister():
    def __init__(self,width=1400,height=800):
        self.image_key = 1
        self.image_url = 'image/meizi/meizi_ ('
        self.image = self.image_url + str(self.image_key) + ').png'
        self.birthplace = (width, height)
        self.ract_x = width
        self.ract_y = height

    def gif(self):
        if self.image_key < 61:
            self.image_key += 1
        else:
            self.image_key = 1
        self.image = self.image_url + str(self.image_key) + ').png'

class MyLabel(QLabel):
    def __init__(self, *args, **kw):
        super().__init__(*args, **kw)
        #声明
        self.setContextMenuPolicy(Qt.CustomContextMenu)
        # 开放右键策略
        self.customContextMenuRequested.connect(self.rightMenuShow)

    # 添加右键菜单
    def rightMenuShow(self, pos):
        menu = QMenu(self)
        menu.addAction(QAction(QIcon('image/net.png'), '浏览器', self, triggered=self.net))
        menu.addAction(QAction(QIcon('image/music.ico'), '网易云', self, triggered=self.music))
        menu.addAction(QAction(QIcon('image/eye.png'), '隐藏', self, triggered=self.hide))
        menu.addAction(QAction(QIcon('image/exit.png'), '退出', self, triggered=self.quit))
        # menu.addAction(QAction(QIcon('image/exit.png'), '打开网易云', self, triggered=self.music))
        menu.exec_(QCursor.pos())

    def quit(self):
        self.close()
        sys.exit()

    def hide(self):
        self.setVisible(False)

    def music(self):

        try:
            os.startfile(r'D:\CloudMusic\cloudmusic.exe')
        except:
            print('路径不正确')

    def net(self):
        try:
            os.startfile(r'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe')
        except:
            print('路径不正确')


class TablePet(QWidget):
    def __init__(self):
        super(TablePet, self).__init__()

        self.sister=Sister()

        self.is_follow_mouse = False

        self.initUi()
        self.tray()

        # 每隔一段时间执行
        timer_sister = QTimer(self)
        timer_sister.timeout.connect(self.gem)
        timer_sister.start(250)

    def gem(self):
        ##桌宠实现gif效果
        self.sister.gif()
        self.pm_sister= QPixmap(self.sister.image)
        self.lb_sister.setPixmap(self.pm_sister)

    def initUi(self):

        ##窗口大小
        screen = QDesktopWidget().screenGeometry()
        self.setGeometry(0,0,screen.width(),screen.height())

        ##桌宠标签
        self.lb_sister = MyLabel(self)
        self.pm_sister= QPixmap(self.sister.image)
        self.lb_sister.setPixmap(self.pm_sister)
        self.lb_sister.move(self.sister.ract_x, self.sister.ract_y)

        self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.SubWindow)
        self.setAutoFillBackground(False)
        self.setAttribute(Qt.WA_TranslucentBackground, True)
        self.showMaximized()


    def mouseDoubleClickEvent(self, QMouseEvent):
        self.hide()

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.is_follow_mouse = True

            event.accept()
            self.setCursor(QCursor(Qt.OpenHandCursor))

    def mouseMoveEvent(self, event):
        if Qt.LeftButton and self.is_follow_mouse:
            self.sister.ract_x=QCursor.pos().x()-77
            self.sister.ract_y=QCursor.pos().y()-63
            self.lb_sister.move(self.sister.ract_x,self.sister.ract_y)
            event.accept()

    def mouseReleaseEvent(self, event):
        self.is_follow_mouse = False
        self.setCursor(QCursor(Qt.ArrowCursor))

    # 系统托盘
    def tray(self):
        tray = QSystemTrayIcon(self)
        tray.setIcon(QIcon('image/meizi/0.png'))

        display = QAction(QIcon('image/eye.png'), '显示', self, triggered=self.display)
        quit = QAction(QIcon('image/exit.png'), '退出', self, triggered=self.quit)
        menu = QMenu(self)
        menu.addAction(quit)
        menu.addAction(display)
        tray.setContextMenu(menu)
        tray.show()

    def quit(self):
        self.close()
        sys.exit()

    def hide(self):

        self.lb_sister.setVisible(False)

    def display(self):
        self.lb_sister.setVisible(True)


if __name__ == '__main__':
    app=QApplication(sys.argv)
    pet=TablePet()
    sys.exit(app.exec_())

http://www.kler.cn/a/501796.html

相关文章:

  • Python使用socket实现简易的http服务
  • Linux常用命令大全
  • 【HM-React】08. Layout模块
  • AI浪潮下的IT变革之路:机遇、挑战与重塑未来
  • ZYNQ初识10(zynq_7010)UART通信实验
  • Java中的Push方法:实现与应用探讨
  • 什么是数据仓库?
  • Perl语言的循环实现
  • 深入了解 Redis Stream 数据类型及其在事件流系统中的应用
  • 【Android】直接使用binder的transact来代替aidl接口
  • nacos从1.x升级到2.4.3问题记录
  • 【C++指南】模板 深度解析
  • 如何使用队列规则(Qdisc)发送数据包
  • Git | git reset命令详解
  • python安装完成后可以进行的后续步骤和注意事项
  • leetcode 2270. 分割数组的方案数 中等
  • 【WPS】【WORDEXCEL】【VB】实现微软WORD自动更正的效果
  • windows wsl ubuntu22 远程桌面连接
  • QT跨平台应用程序开发框架(1)—— 环境搭建
  • Redis集群的键分布机制
  • Y3编辑器地图教程:ORPG教程、防守图教程
  • 扩散模型学习
  • Arthas监控方法内部调用路径,并输出方法路径上的每个节点上耗时
  • 计算机网络之---端口与套接字
  • 机器学习之K-mean算法理解及实现
  • Java中的反射机制及其应用场景