python桌面宠物-最终章【萌妹版】
本帖最后由 kk159 于 2021-5-29 09:15 编辑之前写了3个版本,由无到有的迭代。。。。
V1.0
https://www.52pojie.cn/thread-1448182-1-1.html
第一个版本完全是锥型,对pyqt5的摸索
v2.0
https://www.52pojie.cn/thread-1448589-1-1.html
第二个只是单纯尝试简单的改变。。。。
v3.0
https://www.52pojie.cn/thread-1448889-1-1.html
这个版本,完全只是个人想法对一些有趣的功能尝试和实现,也没有放出源码
大家对这个宠物一致的认为!太丑了。。。。。能不能换个图片!!!
还有图有锯齿,能不能扣的完美点。。。。
本人只是小菜菜,美工实在完美不在行,简单可以说艺术白痴。。。。
再说,宠物再丑,你mind??
还有一点,僵尸就不可以是宠物?????
伸手党,吃瓜群众,技术大牛牛。。。
每个人都有各自的观点和看法
本人旨在分享一个自己实现的想法,希望看官可以亲身动手实现一下,打造真正属于自己的DreamPet。。
很多小伙伴都有一颗有趣的灵魂和创意,建议添加XXX.XXXX功能
其实,有想法何不亲自do it。。
行动起来吧!!!!!!!!!!1
最后奉上最终版本。
也是最简单版本。。。
我会提供源码,成品,和演示过程。。。。。。。。。。
话不多说,有图有真相。。
完整代码
链接: https://pan.baidu.com/s/1qkoFnNRrNbaxwrwVb2oHqA 提取码: yaj5
演示视频:
由于文件太大,不能上传
放到B站了。。。
https://www.bilibili.com/video/BV1ih411Y7qk/
环境:win和linux只要安装好python
类库只需要pyqt5.。。安装方法:pip install pyqt5
运行方法:
1.python运行
2.执行exe(未必合适所有人)
参照以下方法:
打开浏览器和music,每个人的应用程序目录可能不一样,需要自行更改。
打包的成品只是根据个人电脑的程序目录打包而成,未必适合每一个人。!
需要可以根据自己情况更改源码再用pyinstaller打包即可
打包方法亦很简单,
安装pyinstaller
pyinstaller -Fw mian.py 在dist目录下就会生成可执行文件exe的
同时捞一捞
远古时代的植物大战僵尸的帖子
https://www.52pojie.cn/thread-1404386-1-1.html
还有arch的
https://www.52pojie.cn/thread-1403777-1-1.html
最后感谢每一位给的建议和支持,谢谢大家!!!!!
源码:
# *_* coding : UTF-8 *_*
# author:Leemamas
# 开发时间:2021/5/2819:16
import 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_())
本帖最后由 QQending 于 2021-5-31 14:32 编辑
增加了一个双击托盘 显示/隐藏 桌面宠物的功能
```
class TablePet(QWidget):
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()
'''添加双击显示/隐藏桌面宠物'''
tray.activated.connect(self.icon_activated)
def icon_activated(self,reason):
""" 双击显示/隐藏桌面宠物 """
if reason == QSystemTrayIcon.DoubleClick:
if self.lb_sister.isVisible():
self.hide()
else:
self.display()
``` 不错,又回到了塞班时代 根据大佬的代码,我稍微加了点功能,分享一下喽
https://wwa.lanzoui.com/idjqFplvm1a 虔来学习 发表于 2021-5-30 13:23
根据大佬的代码,我稍微加了点功能,分享一下喽
https://wwa.lanzoui.com/idjqFplvm1a
前面那个bug有点多,改了一下
这次用win10打包的,应该只能用win10打开
https://wwa.lanzoui.com/iZTEjq0uoej 震惊,越来越完善了,感觉可以成一个完整的项目然后进行后一步了 哈哈哈,其实很喜欢楼主那个植物大战僵尸的 不错的帖子,收藏学习。 厉害的,值得学习 不错不错最好在优化一下 有翻译 截图内存清理 功能就好了 哈哈,太有才了{:1_921:} 大佬,怎么设置窗口置顶呢 想放置在最上层{:17_1062:} 在我眼中只要会编代码的 都是大神 呼叫植物大战僵尸