吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 40691|回复: 597
收起左侧

[编程] PYthon写一个桌面宠物

    [复制链接]
kk159 发表于 2021-5-27 13:15
本帖最后由 kk159 于 2021-5-27 13:15 编辑

基于Pyqt5实现,
最终效果
Snipaste_2021-05-27_12-20-28.png

实现效果单一,僵尸在桌面自行移动,托盘。
其他功能自行完善。。。。

完整项目:https://github.com/leemamas/godtoy
视频演示:https://www.bilibili.com/video/BV14h411v7Y8/

知识点:
1.创建一个简单的应用程序
[Python] 纯文本查看 复制代码
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.加载宠物图片,窗体透明
[Python] 纯文本查看 复制代码
##导入类库
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__调用
[Python] 纯文本查看 复制代码
    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.托盘退出方法
[Python] 纯文本查看 复制代码
 ation_quit = QAction('QUIT', self, triggered=self.quit)
    def quit(self):
        self.close()
        sys.exit()


5.让图片动起来
[Python] 纯文本查看 复制代码
    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.让宠物移动
[Python] 纯文本查看 复制代码
    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.实现鼠标拖放
[Python] 纯文本查看 复制代码
 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))



完整代码
[Python] 纯文本查看 复制代码
# *_* coding : UTF-8 *_*
# author  :  Leemamas
# 开发时间  :  2021/5/20  3: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_())

免费评分

参与人数 157威望 +1 吾爱币 +158 热心值 +136 收起 理由
HyggePeach + 1 + 1 谢谢@Thanks!
szkent + 1 + 1 谢谢@Thanks!
g1ave + 1 谢谢@Thanks!
JM14128 + 1 + 1 用心讨论,共获提升!
zxq08 + 1 我很赞同!
主骑士 + 1 谢谢@Thanks!
葱葱冲冲冲 + 1 + 1 用心讨论,共获提升!
Bug!4u. + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
微笑小生 + 1 + 1 我很赞同!
pp588688 + 1 热心回复!
yao3737 + 1 用心讨论,共获提升!
xmm821 + 1 + 1 谢谢@Thanks!
jackjiach + 1 用心讨论,共获提升!
夜空飞翔 + 1 用心讨论,共获提升!
wsdd + 1 谢谢@Thanks!
xbw6613 + 1 谢谢@Thanks!
疯子猪 + 1 + 1 谢谢@Thanks!
520bingge + 1 大哥我照片去哪里要?
流浪的灵魂 + 1 谢谢@Thanks!
qq42773175 + 1 谢谢@Thanks!
hwr2021 + 1 我很赞同!
littleSeven1111 + 1 + 1 谢谢@Thanks!
KIREI9982 + 1 + 1 我很赞同!
TFF + 1 谢谢@Thanks!
Forever3001 + 1 + 1 我很赞同!
Mc774779429 + 1 用心讨论,共获提升!
javad78 + 1 热心回复!
ws19930817 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
与尔共销愁 + 1 + 1 用心讨论,共获提升!
Ehrmantraut + 1 + 1 插个眼 有时间了自己也学习写一个
liang26044 + 1 我很赞同!
Smallbrother + 1 + 1 用心讨论,共获提升!
pk555157815 + 1 + 1 谢谢@Thanks!
quaternion + 2 + 1 我很赞同!
这是追求不是梦 + 1 + 1 我很赞同!
哈喽小猴子 + 1 + 1 谢谢@Thanks!
silence_17 + 1 + 1 我很赞同!
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
caliph21 + 1 + 1 用心讨论,共获提升!
狂野的小西瓜 + 1 谢谢@Thanks!
Thephosphor + 1 + 1 用心讨论,共获提升!
华文杉 + 1 + 1 我很赞同!
aywl47 + 1 + 1 我很赞同!
EscapeUtopia + 1 + 1 我很赞同!
xc3s33 + 1 + 1 热心回复!
wq2710 + 1 用心讨论,共获提升!
longling + 1 + 1 用心讨论,共获提升!
爱丁堡525 + 1 + 1 我很赞同!
梦走天涯 + 1 + 1 我很赞同!
叽歪 + 1 热心回复!
bjrunbo + 1 + 1 热心回复!
逍遥灬家族 + 1 热心回复!
wanjuny + 1 热心回复!
飄颻 + 1 + 1 我很赞同!
guobaganqingyin + 1 + 1 热心回复!
yixi + 1 + 1 谢谢@Thanks!
小curry是玉米精 + 1 + 1 谢谢@Thanks!
gprboy + 1 + 1 热心回复!
庸世俗人罢勒 + 1 + 1 谢谢@Thanks!
Gray. + 1 用心讨论,共获提升!
fujianguo + 1 + 1 我很赞同!
东皇神乐 + 1 + 1 可以自定义
yangsenhappy + 1 + 1 能不能换个可爱一点的妹子
SDQ + 1 + 1 谢谢@Thanks!
wangyut85 + 1 + 1 用心讨论,共获提升!
MoreMoChawei + 1 + 1 热心回复!
budng + 1 谢谢@Thanks!
当浮一白 + 1 + 1 用心讨论,共获提升!
zhaoxukai + 1 win10 有一个3D 这个可以用么?
zhaoyf18 + 1 + 1 用心讨论,共获提升!
素颜朝天 + 1 + 1 我很赞同!
jackydengjie + 1 + 1 谢谢@Thanks!
hpoutnow + 1 + 1 谢谢@Thanks!
Tylerlover + 1 + 1 谢谢@Thanks!
Indra + 1 用心讨论,共获提升!
jb020101 + 1 + 1 谢谢@Thanks!
zecore + 1 + 1 谢谢@Thanks!
温柔的一哥 + 1 + 1 我很赞同!
gzsklsskszngc + 1 + 1 谢谢@Thanks!
pm271218 + 1 + 1 谢谢@Thanks!
Happpiday + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
7997997999 + 1 + 1 我很赞同!
xiaofanxiaoyu + 1 + 1 我很赞同!
柯里昂热 + 1 鼓励转贴优秀软件安全工具和文档!
sgzdmsz + 1 + 1 我很赞同!
w5230186 + 1 我很赞同!
pojielhb + 1 + 1 热心回复!
xiezy + 1 用心讨论,共获提升!
HuZH + 1 + 1 我很赞同!
大头寀 + 1 + 1 我很赞同!
景寒杏 + 1 热心回复!
60000ak + 1 + 1 热心回复!
ma4907758 + 1 谢谢@Thanks!
hap + 1 + 1 鼓励转贴优秀软件安全工具和文档!
Ljh666 + 1 + 1 谢谢@Thanks!
小黑啊123 + 1 + 1 热心回复!
man2924981 + 1 + 1 我很赞同!
薯条子 + 1 + 1 谢谢@Thanks!
jang2001 + 1 + 1 大佬
过往的雨安居q + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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


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

image.png
shinnair0121 发表于 2021-5-27 13:24
可以,不错学习了,但可不可以换个好看点的图片
pojie666 发表于 2021-5-27 13:50
流浪星空 发表于 2021-5-27 14:10
皮卡丘来一个可以不
hyprince33 发表于 2021-5-27 15:13
能不能解释一下 在哪里换图片  我想用个美女的
 楼主| kk159 发表于 2021-5-27 13:28
shinnair0121 发表于 2021-5-27 13:24
可以,不错学习了,但可不可以换个好看点的图片

图片自行更换啊。。图片我之前有,就随手拿来用了。。
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  我心暗道:大哥,你好!

小伙子,眼神不错。。
hu_tides 发表于 2021-5-27 13:55
备用学习
人云亦云yi 发表于 2021-5-27 14:08
今天试试,谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 07:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表