kk159 发表于 2021-5-27 13:15

PYthon写一个桌面宠物

本帖最后由 kk159 于 2021-5-27 13:15 编辑

基于Pyqt5实现,
最终效果:


实现效果单一,僵尸在桌面自行移动,托盘。
其他功能自行完善。。。。
完整项目:https://github.com/leemamas/godtoy
视频演示:https://www.bilibili.com/video/BV14h411v7Y8/
知识点:
1.创建一个简单的应用程序
from PyQt5.QtWidgets import *
import sys

class Test(QWidget):
    def __init__(self):
      super(Test, self).__init__()
      self.initUi()

    def initUi(self):
      #窗口位置,大小
      self.setGeometry(300, 300, 300, 300)
      #标题
      self.setWindowTitle('test')
      #展示
      self.show()

if __name__ == '__main__':
    app=QApplication(sys.argv)
    test=Test()
    sys.exit(app.exec_())

2.加载宠物图片,窗体透明
##导入类库
from PyQt5.QtGui import *
from PyQt5.QtCore import *
##在initUi类里面添加
#加载图片
      self.lbl = QLabel(self)
      self.key = 0
      self.pic_url = 'source\Zombie\Zombie_0.png'
      self.pm = QPixmap(self.pic_url)
      self.lbl.setPixmap(self.pm)

      # 背景透明等效果
      self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.SubWindow)
      self.setAutoFillBackground(False)
      self.setAttribute(Qt.WA_TranslucentBackground, True)

3.增加托盘方法,在__init__调用
    def __init__(self):
      super(Test, self).__init__()
      ##调用方法
      self.tray()
# 系统托盘
    def tray(self):
      ##托盘图标
      tp = QSystemTrayIcon(self)
      tp.setIcon(QIcon('source\Zombie\Zombie_0.png'))
      ation_quit = QAction('QUIT', self)
      tpMenu = QMenu(self)
      tpMenu.addAction(ation_quit)
      tp.setContextMenu(tpMenu)
      tp.show()

4.托盘退出方法
ation_quit = QAction('QUIT', self, triggered=self.quit)
    def quit(self):
      self.close()
      sys.exit()

5.让图片动起来
    def __init__(self):
      。。。。。

      # 每隔一段时间做个动作
      self.timer = QTimer()
      self.timer.timeout.connect(self.randomAct)
      self.timer.start(100)

    def randomAct(self):
      # 读取图片不同的地址,实现动画效果
      if self.key<21:
            self.key+=1
      else:
            self.key=0

      self.pic_url = 'source\Zombie\Zombie_' + str(self.key) + '.png'
      self.pm = QPixmap(self.pic_url)
      self.lbl.setPixmap(self.pm)

    def initUi(self):
   
##修改为这样
self.pic_url='source\Zombie\Zombie_'+str(self.key)+'.png'
      

6.让宠物移动
    def randomAct(self):
         。。。。。。
      # 实现行进效果
      if self.w > 0:
            self.w -= 2
      else:
            self.w = 1400
      self.move(self.w, self.h)
      。。。。。。。。。。
    def initUi(self):
      self.w = 1400
      self.h = 800
      #窗口位置,大小
      self.setGeometry( self.w ,self.h, 300, 300)


7.实现鼠标拖放
def __init__(self):
      。。。。
      self.is_follow_mouse = False
      self.mouse_drag_pos = self.pos()
    def randomAct(self):
      # 读取图片不同的地址,实现动画效果
      if self.key<21:
            self.key+=1
      else:
            self.key=0

      self.pic_url = 'source\Zombie\Zombie_' + str(self.key) + '.png'
      self.pm = QPixmap(self.pic_url)
      if not self.is_follow_mouse:
            # 实现行进效果
            if self.w>0:
                self.w-=2
            else:
                self.w=1400
            self.move(self.w, self.h)
      self.lbl.setPixmap(self.pm)
#鼠标事件
    def mousePressEvent(self, event):
      if event.button() == Qt.LeftButton:
            self.is_follow_mouse = True
            self.mouse_drag_pos = event.globalPos() - self.pos()
            event.accept()
            self.setCursor(QCursor(Qt.OpenHandCursor))

    def mouseMoveEvent(self, event):
      if Qt.LeftButton and self.is_follow_mouse:
            self.move(event.globalPos() - self.mouse_drag_pos)
            xy=self.pos()
            self.w,self.h=xy.x(),xy.y()
            event.accept()

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


完整代码:
# *_* coding : UTF-8 *_*
# author:Leemamas
# 开发时间:2021/5/203:06

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

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

      self.is_follow_mouse = False
      self.mouse_drag_pos = self.pos()
      # 每隔一段时间做个动作
      self.timer = QTimer()
      self.timer.timeout.connect(self.randomAct)
      self.timer.start(100)


    def randomAct(self):
      # 读取图片不同的地址,实现动画效果
      if self.key<21:
            self.key+=1
      else:
            self.key=0

      self.pic_url = 'source\Zombie\Zombie_' + str(self.key) + '.png'
      self.pm = QPixmap(self.pic_url)
      if not self.is_follow_mouse:
            # 实现行进效果
            if self.w>0:
                self.w-=2
            else:
                self.w=1400
            self.move(self.w, self.h)
      self.lbl.setPixmap(self.pm)



    def initUi(self):
      screen = QDesktopWidget().screenGeometry()
      self.w=1400
      self.h=800
      self.setGeometry(self.w,self.h,300,300)
      # self.setWindowTitle('mypet')
      self.lbl = QLabel(self)
      self.key=0
      self.pic_url='source\Zombie\Zombie_'+str(self.key)+'.png'
      self.pm = QPixmap(self.pic_url)
      self.lbl.setPixmap(self.pm)

      # 背景透明等效果
      self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.SubWindow)
      self.setAutoFillBackground(False)
      self.setAttribute(Qt.WA_TranslucentBackground, True)
      self.show()
      # self.repaint()


    #系统托盘
    def tray(self):
      tp=QSystemTrayIcon(self)
      tp.setIcon(QIcon('source\Zombie\Zombie_0.png'))
      ation_quit= QAction('QUIT', self, triggered=self.quit)
      tpMenu=QMenu(self)
      tpMenu.addAction(ation_quit)
      tp.setContextMenu(tpMenu)
      tp.show()

    #鼠标事件
    def mousePressEvent(self, event):
      if event.button() == Qt.LeftButton:
            self.is_follow_mouse = True
            self.mouse_drag_pos = event.globalPos() - self.pos()
            event.accept()
            self.setCursor(QCursor(Qt.OpenHandCursor))

    def mouseMoveEvent(self, event):
      if Qt.LeftButton and self.is_follow_mouse:
            self.move(event.globalPos() - self.mouse_drag_pos)
            xy=self.pos()
            self.w,self.h=xy.x(),xy.y()
            event.accept()

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

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


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

longestusername 发表于 2021-5-27 17:33



在苹果电脑上跑起来了!很屌啊哈哈哈哈哈哈。谢谢楼主。
(需要简单的把代码中路径字符串中的\换成可以跨平台的os.sep, 才能在mac/linux上编译哦)

shinnair0121 发表于 2021-5-27 13:24

可以,不错学习了,但可不可以换个好看点的图片

pojie666 发表于 2021-5-27 13:50

kk159 发表于 2021-5-27 13:47
小伙子,眼神不错。。

嘻嘻~~~https://mapp.alicdn.com/1622094652580St69am4fGkHFH9V.png

流浪星空 发表于 2021-5-27 14:10

皮卡丘来一个可以不

hyprince33 发表于 2021-5-27 15:13

能不能解释一下 在哪里换图片我想用个美女的

kk159 发表于 2021-5-27 13:28

shinnair0121 发表于 2021-5-27 13:24
可以,不错学习了,但可不可以换个好看点的图片

图片自行更换啊。。图片我之前有,就随手拿来用了。。{:1_936:}

pojie666 发表于 2021-5-27 13:41

看到你右下角的——V2我心暗道:大哥,你好!

frtfzt 发表于 2021-5-27 13:45

感谢分享

kk159 发表于 2021-5-27 13:47

pojie666 发表于 2021-5-27 13:41
看到你右下角的——V2我心暗道:大哥,你好!

;www小伙子,眼神不错。。

hu_tides 发表于 2021-5-27 13:55

{:1_921:} 备用学习

人云亦云yi 发表于 2021-5-27 14:08

今天试试,谢谢分享
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: PYthon写一个桌面宠物