kk159 发表于 2021-5-29 09:15

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:30

本帖最后由 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()
```

野小子SAS 发表于 2021-5-29 09:25

不错,又回到了塞班时代

虔来学习 发表于 2021-5-30 13:23

根据大佬的代码,我稍微加了点功能,分享一下喽
https://wwa.lanzoui.com/idjqFplvm1a

虔来学习 发表于 2021-6-10 20:49

虔来学习 发表于 2021-5-30 13:23
根据大佬的代码,我稍微加了点功能,分享一下喽
https://wwa.lanzoui.com/idjqFplvm1a

前面那个bug有点多,改了一下
这次用win10打包的,应该只能用win10打开
https://wwa.lanzoui.com/iZTEjq0uoej

doullse 发表于 2021-5-31 15:38

震惊,越来越完善了,感觉可以成一个完整的项目然后进行后一步了

补补23456 发表于 2021-5-29 09:26

哈哈哈,其实很喜欢楼主那个植物大战僵尸的

60235300 发表于 2021-5-29 09:23

不错的帖子,收藏学习。

凑井盖 发表于 2021-5-29 09:32

厉害的,值得学习

追风营销 发表于 2021-5-29 09:33

不错不错最好在优化一下 有翻译 截图内存清理 功能就好了

lsword2000 发表于 2021-5-29 09:34

哈哈,太有才了{:1_921:}

15278066219 发表于 2021-5-29 09:37

大佬,怎么设置窗口置顶呢 想放置在最上层{:17_1062:}

风乘云集水浒卡 发表于 2021-5-29 09:39

在我眼中只要会编代码的 都是大神

gy12354687 发表于 2021-5-29 09:51

呼叫植物大战僵尸
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: python桌面宠物-最终章【萌妹版】