吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 42360|回复: 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] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
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] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
##导入类库
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] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
    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] 纯文本查看 复制代码
1
2
3
4
ation_quit = QAction('QUIT', self, triggered=self.quit)
   def quit(self):
       self.close()
       sys.exit()


5.让图片动起来
[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    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] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
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] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
# *_* 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
可以,不错学习了,但可不可以换个好看点的图片
hyprince33 发表于 2021-5-27 15:13
能不能解释一下 在哪里换图片  我想用个美女的
pojie666 发表于 2021-5-27 13:50
kk159 发表于 2021-5-27 13:47
小伙子,眼神不错。。

嘻嘻~~~
流浪星空 发表于 2021-5-27 14:10
皮卡丘来一个可以不
 楼主| 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, 2025-5-28 19:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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