吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 15183|回复: 144
收起左侧

[Python 转载] python桌面宠物V2,0

    [复制链接]
kk159 发表于 2021-5-28 01:20
本帖最后由 kk159 于 2021-5-28 02:12 编辑

V1.0剧情回顾
V2.0 新增功能,变换形态
效果演示:
GIF 2021-5-28 1-17-49.gif
1.新加另外一种外形
Snipaste_2021-05-28_01-02-28.png
Snipaste_2021-05-28_01-06-01.png
2.托盘添加变身按钮
Snipaste_2021-05-28_01-02-51.png

图片素材: source.rar (384.59 KB, 下载次数: 334)
完整代码:
[Python] 纯文本查看 复制代码
# *_* coding : UTF-8 *_*
# author  :  Leemamas
# 开发时间  :  2021/5/28  0:48

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.is_follow_mouse = False
        self.mouse_drag_pos = self.pos()
        # 每隔一段时间做个动作
        self.timer = QTimer()
        self.timer.timeout.connect(self.randomAct)
        self.timer.start(100)

        ##僵尸形态
        self.sharp=1
        ##皇帝的新衣
        self.clothes = ''
        self.clothes_key = 0
        self.wardrobe(self.sharp)

        self.initUi()
        self.tray()


    ##衣柜
    def wardrobe(self,key):

        default = 'source\Zombie\Zombie_'
        battle = 'source\ConeheadZombie\ConeheadZombie_'
        if key == 0:
            self.clothes=default
            ##TODO 根据文件数自动获取
            self.clothes_key=21
        else:
            self.clothes=battle
            self.clothes_key=20


    ##变身
    def transformation(self):
        if self.sharp==0:
            self.wardrobe(1)
            self.sharp=1
        else:
            self.wardrobe(0)
            self.sharp=0

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

        self.pic_url = self.clothes + 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=self.clothes+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)
        transformation= QAction('transformation', self, triggered=self.transformation)
        tpMenu=QMenu(self)
        tpMenu.addAction(ation_quit)
        tpMenu.addAction(transformation)
        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_())

免费评分

参与人数 59吾爱币 +56 热心值 +55 收起 理由
QingYi. + 3 + 1 我很赞同!
zq5841314521 + 1 + 1 我很赞同!
丶陈先森 + 1 + 1 热心回复!
贡嘎拉 + 1 + 1 谢谢@Thanks!
XMQ + 1 + 1 我很赞同!
qhdsinoocean + 1 + 1 谢谢@Thanks!
xiaowei619 + 1 我很赞同!
passcard + 1 + 1 热心回复!
queenmly + 1 + 1 热心回复!
zhminxp + 1 + 1 谢谢@Thanks!
鲜血淋漓一舞倾 + 1 + 1 我很赞同!
苏苏的小跟班 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wang3293702 + 1 + 1 可以做一个类似WIN10气泡动态屏保的那种效果吗
doullse + 1 冲冲冲
zq769427 + 1 + 1 谢谢@Thanks!
qiujunjian1 + 1 + 1 谢谢@Thanks!
taobing + 1 + 1 热心回复!
lihaole + 1 谢谢@Thanks!
yx69 + 1 + 1 我很赞同!
hewang123 + 1 谢谢@Thanks!
云宗驾贴旗 + 1 + 1 热心回复!
陈世界 + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
看你一下竟然 + 1 + 1 谢谢@Thanks!
禾水木 + 1 + 1 热心回复!
彬仔。 + 1 谢谢@Thanks!
DPlus + 1 + 1 谢谢@Thanks!
demigod.dww + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
皓哥阿 + 1 谢谢@Thanks!
Kermond + 1 + 1 谢谢@Thanks!
cheng1998 + 1 + 1 热心回复!
amdint123123123 + 1 + 1 我很赞同!
makeipromise + 1 + 1 谢谢@Thanks!
jomme012 + 1 + 1 请勿灌水,提高回帖质量是每位会员应尽的义务!
404undefined + 1 + 1 我很赞同!
saoxu + 1 + 1 谢谢@Thanks!
52Star + 1 热心回复!
Grasssir + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
阿成155 + 1 + 1 热心回复!
去追寻那心光 + 1 + 1 谢谢桌面已经可以玩植物大战僵尸了
虔来学习 + 1 + 1 谢谢@Thanks!
Aric + 1 + 1 热心回复!
玩世不攻 + 1 + 1 热心回复!
MC心福 + 1 + 1 热心回复!
zqguang3708 + 2 + 1 我很赞同!
a5228172 + 1 + 1 热心回复!
叶凯 + 1 + 1 谢谢@Thanks!
gjl0305 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
applesilaji + 1 + 1 我很赞同!
g00gle + 1 + 1 既然僵尸都跑了,能搞个豌豆炮台素材吗,大佬
visaction + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!第200个热心。
水到渠成的执着 + 1 + 1 我很赞同!
我爱猫哥 + 1 + 1 想学Python,请问下楼主,怎么入门?
kyle_mars + 1 谢谢@Thanks!
zhuzhuwa + 1 + 1 可以增加让宠物说话功能,与用户有更多的互动
yunmeng + 1 + 1 用心讨论,共获提升!
dbu00956 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lfm333 + 1 + 1 谢谢@Thanks!
lizy169 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Shaker + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

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

XMQ 发表于 2021-6-3 18:27
做了点小小改动
[Python] 纯文本查看 复制代码
# -*-coding:utf-8-*-
import sys
import time
from threading import Thread

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


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

        self.is_follow_mouse = False
        self.mouse_drag_pos = self.pos()

        self.initUi()

        self.tray()
    ##衣柜
    def wardrobe(self, key):

        default = 'source\Zombie\Zombie_'
        battle = 'source\ConeheadZombie\ConeheadZombie_'
        if key == 0:
            clothes = default
            ##TODO 根据文件数自动获取
            clothes_key = 21
            return clothes,int(clothes_key),int(key)
        else:
            clothes = battle
            clothes_key = 20
            return clothes, int(clothes_key), int(key)

    ##变身
    def transformation(self):
        if self.sharp == 0:
            self.wardrobe(1)
            self.sharp = 1
        else:
            self.wardrobe(0)
            self.sharp = 0

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

            pic_url = clothes + str(key) + '.png'
            pm = QPixmap(pic_url)
            if not self.is_follow_mouse:
                # 实现行进效果
                if self.w > 0 and self.w >1000:
                    print('self.x2:',self.x2)
                    if self.x2:
                        self.w += 2
                        if self.w > 1400:
                            self.x2 = False
                    else:
                        self.w -= 2
                elif self.w <= 1000:
                    self.x2 = True
                    self.w += 2
                else:
                    self.w = 1400
                print('self.w', self.w,self.h)
                self.move(self.w, self.h)
            print(lbl)
            lbl.setPixmap(pm)
            time.sleep(0.6)

    def initUi(self):
        self.x2 = False
        self.w = 1400
        self.h = 800
        self.setGeometry(self.w, self.h, 300, 300)
        self.lbl = QLabel(self)
        sharp = 1
        clothes, clothes_key, key = self.wardrobe(sharp)
        self.key = 0
        self.pic_url = clothes + str(self.key) + '.png'
        self.pm = QPixmap(self.pic_url)
        self.lbl.setPixmap(self.pm)
        print(clothes, clothes_key, key)


        #
        self.lbl2 = QLabel(self)
        sharp2 = 0
        clothes2,clothes_key2,key2 = self.wardrobe(sharp2)
        self.pic_url2 = clothes2 + str(self.key) + '.png'
        self.pm2 = QPixmap(self.pic_url2)
        self.lbl2.setPixmap(self.pm2)


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


        vbox = QVBoxLayout()
        vbox.addWidget(self.lbl)
        vbox.addWidget(self.lbl2)
        self.setLayout(vbox)




    # 系统托盘
    def tray(self):
        tp = QSystemTrayIcon(self)
        tp.setIcon(QIcon('source\Zombie\Zombie_0.png'))
        ation_quit = QAction('QUIT', self, triggered=self.quit)
        transformation = QAction('transformation', self, triggered=self.transformation)
        tpMenu = QMenu(self)
        tpMenu.addAction(ation_quit)
        tpMenu.addAction(transformation)
        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()
    def a(self):
        while 1:
            print('7')
    def run(self):
        ls = []
        for i in [1, 0]:
            if i == 1:
                print(4)
                clothes, clothes_key, key = myPet.wardrobe(i)
                g = Thread(target=myPet.randomAct, args=(key, clothes_key, clothes, self.lbl))
                ls.append(g)
            elif i == 0:
                print(5)
                clothes2, clothes_key2, key2 = myPet.wardrobe(i)
                g2 = Thread(target=myPet.randomAct, args=(key2, clothes_key2, clothes2, self.lbl2))
                ls.append(g2)
        for j in ls:
            j.start()
            time.sleep(0.3)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    myPet = TablePet()
    myPet.run()
    myPet.show()

    sys.exit(app.exec_())
CAIjibudong 发表于 2021-5-28 03:45
刚看了第一个帖子!你这都2.0了?????学习了 真的厉害!
虔来学习 发表于 2021-5-28 05:41
我觉得作者可以再加一个快捷键隐藏,关闭的方法。。。
 楼主| kk159 发表于 2021-5-28 06:22
虔来学习 发表于 2021-5-28 05:41
我觉得作者可以再加一个快捷键隐藏,关闭的方法。。。

good point!
小卡爱熟妇 发表于 2021-5-28 07:11
感谢分享
tzlqjyx 发表于 2021-5-28 07:25
解压小软件,哈哈
jghdhr 发表于 2021-5-28 07:33
有点意思,感谢分享
lfm333 发表于 2021-5-28 07:38
感谢分享
吃兔子的肉 发表于 2021-5-28 07:45
感谢分享
﹏詆調℡ 发表于 2021-5-28 07:46
感谢分享思路  尝试一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-22 03:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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