标题
相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢,点个关注不迷路!!!
1. 简介:
今天用代码实现了一个桌面宠物的应用,基于PyQt5,具备以下功能:
- 桌宠图像动画:桌宠通过显示一系列图片(模拟GIF效果)来表现动态。
- 桌宠拖动:支持鼠标拖动桌宠到屏幕的任意位置。
右键菜单:
- 打开浏览器。
- 打开音乐播放器(如网易云音乐)。
- 隐藏显示桌宠。
- 退出程序。
系统托盘:
- 支持通过系统托盘菜单显示或退出桌宠。
运行要求
文件路径配置:
- 确保图片路径 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_())