首页 > 分享 > Python实现桌面宠物

Python实现桌面宠物

最新推荐文章于 2024-10-22 09:54:51 发布

hxxjxw 于 2020-05-04 22:37:20 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

基于PyQt5

import os

import cfg

import sys

import random

from PyQt5.QtGui import *

from PyQt5.QtCore import *

from PyQt5.QtWidgets import *

from PyQt5 import QtWidgets, QtGui

'''桌面宠物'''

class DesktopPet(QWidget):

def __init__(self, parent=None, **kwargs):

super(DesktopPet, self).__init__(parent)

self.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint|Qt.SubWindow)

self.setAutoFillBackground(False)

self.setAttribute(Qt.WA_TranslucentBackground, True)

self.repaint()

self.pet_images, iconpath = self.randomLoadPetImages()

quit_action = QAction('退出', self, triggered=self.quit)

quit_action.setIcon(QIcon(iconpath))

self.tray_icon_menu = QMenu(self)

self.tray_icon_menu.addAction(quit_action)

self.tray_icon = QSystemTrayIcon(self)

self.tray_icon.setIcon(QIcon(iconpath))

self.tray_icon.setContextMenu(self.tray_icon_menu)

self.tray_icon.show()

self.image = QLabel(self)

self.setImage(self.pet_images[0][0])

self.is_follow_mouse = False

self.mouse_drag_pos = self.pos()

self.resize(128, 128)

self.randomPosition()

self.show()

self.is_running_action = False

self.action_images = []

self.action_pointer = 0

self.action_max_len = 0

self.timer = QTimer()

self.timer.timeout.connect(self.randomAct)

self.timer.start(500)

'''随机做一个动作'''

def randomAct(self):

if not self.is_running_action:

self.is_running_action = True

self.action_images = random.choice(self.pet_images)

self.action_max_len = len(self.action_images)

self.action_pointer = 0

self.runFrame()

'''完成动作的每一帧'''

def runFrame(self):

if self.action_pointer == self.action_max_len:

self.is_running_action = False

self.action_pointer = 0

self.action_max_len = 0

self.setImage(self.action_images[self.action_pointer])

self.action_pointer += 1

'''设置当前显示的图片'''

def setImage(self, image):

self.image.setPixmap(QPixmap.fromImage(image))

'''随机导入一个桌面宠物的所有图片'''

def randomLoadPetImages(self):

pet_name = random.choice(list(cfg.PET_ACTIONS_MAP.keys()))

actions = cfg.PET_ACTIONS_MAP[pet_name]

pet_images = []

for action in actions:

pet_images.append([self.loadImage(os.path.join(cfg.ROOT_DIR, pet_name, 'shime'+item+'.png')) for item in action])

iconpath = os.path.join(cfg.ROOT_DIR, pet_name, 'shime1.png')

return pet_images, iconpath

'''鼠标左键按下时, 宠物将和鼠标位置绑定'''

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)

event.accept()

'''鼠标释放时, 取消绑定'''

def mouseReleaseEvent(self, event):

self.is_follow_mouse = False

self.setCursor(QCursor(Qt.ArrowCursor))

'''导入图像'''

def loadImage(self, imagepath):

image = QImage()

image.load(imagepath)

return image

'''随机到一个屏幕上的某个位置'''

def randomPosition(self):

screen_geo = QDesktopWidget().screenGeometry()

pet_geo = self.geometry()

width = (screen_geo.width() - pet_geo.width()) * random.random()

height = (screen_geo.height() - pet_geo.height()) * random.random()

self.move(width, height)

'''退出程序'''

def quit(self):

self.close()

sys.exit()

'''run'''

if __name__ == '__main__':

app = QApplication(sys.argv)

pet = DesktopPet()

sys.exit(app.exec_())

目录结构

效果

程序设定的是随机选择显示的宠物

做右下角任务栏的托盘图标可以设置宠物退出,或者直接结束python程序

参考

      https://zhuanlan.zhihu.com/p/125693970

真是大佬,给我打开新世界的大门

相关知识

Python实现桌面挂件,做一只可爱的桌面宠物~
用Python实现自制桌面宠物,变出一个桌面小挂件
python桌面宠物模块
如何用python写一个桌面宠物
用Python制作桌面宠物
用python写个桌面挂件
python桌面宠物
Python实现桌面宠物
用Python写个桌面挂件,手把手带你做只桌面宠物~
【趣味案例】利用python写个桌面挂件

网址: Python实现桌面宠物 https://m.mcbbbk.com/newsview644901.html

所属分类:萌宠日常
上一篇: 用JAVAFX做一个简单的桌面宠
下一篇: 猫咪绝育后第一餐吃什么好