千家信息网

怎么用Python制作一个可以聊天的皮卡丘版桌面宠物

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍了怎么用Python制作一个可以聊天的皮卡丘版桌面宠物,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。开发工具Pytho
千家信息网最后更新 2026年11月02日怎么用Python制作一个可以聊天的皮卡丘版桌面宠物

这篇文章主要介绍了怎么用Python制作一个可以聊天的皮卡丘版桌面宠物,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

开发工具

Python版本:3.6.4

相关模块:

PyQt5模块;

以及一些Python自带的模块

原理简介

既然要写个桌面宠物,首先当然是要找宠物的图片素材啦。这里我们使用的是来自shimiji这款手机APP上的宠物图片素材,例如皮卡丘:

我下了大约60多种宠物的图片素材供大家选择:

在相关文件里都打包一起提供了,所以这里就不分享爬虫代码了(我挑选了一下,只要不是我觉得特别丑的,我基本都保留了),别给人家服务器带来不必要的压力。

接下来,我们就可以开始设计我们的桌面宠物啦。鉴于网上用python写的桌面挂件基本都是基于tkinter的,为了突出公众号的与众不同,这里我们采用PyQt5来实现我们的桌面宠物。

步骤实现

首先,我们来初始化一个桌面宠物的窗口组件:

class DesktopPet(QWidget):    def __init__(self, parent=None, **kwargs):        super(DesktopPet, self).__init__(parent)        self.show()

它的效果是这样子的:

接下来,我们设置一下窗口的属性让更适合作为一个宠物的窗口:

# 初始化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()# 当前显示的图片self.image = QLabel(self)self.setImage(self.pet_images[0][0])

其中随机导入一个宠物的所有图片的函数代码实现如下:

'''随机导入一个桌面宠物的所有图片'''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 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)

现在,运行我们的程序时,效果是这样子的:

好像蛮不错的呢~等等,好像有问题,重新设置了窗口属性之后,这玩意咋退出啊?在宠物右上角加个×这样的符号又好像很奇怪?

别急,我们可以给我们的桌面宠物添加一个托盘图标,以实现桌面宠物程序的退出功能:

# 设置退出选项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()

效果是这样子的:

OK,这样好像有模有样了呢~但是好像还是不太对的样子,这宠物每次在桌面生成的位置是随机的,但是我们却无法调整这个宠物的位置,这显然不合理,作为一个桌面宠物,你肯定不能在妨碍主人工作的位置啊!要不我们来写一下鼠标按下、移动以及释放时的函数吧,这样就可以用鼠标拖动它了:

'''鼠标左键按下时, 宠物将和鼠标位置绑定'''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))

效果如下:

哈哈,越来越像样了呢~最后,作为一个活泼的宠物,你不能这么呆板,一动也不动吧?好歹要学会做做表情逗主人开心吧?OK,我们先来设置一个定时器:

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

定时器每隔一段时间切换一下选中的宠物的图片,以达到宠物做表情动作的动画效果(视频是一帧帧的图片组成的这种基础内容就不需要我来科普了吧T_T)。当然,这里我们必须对图片进行动作分类(在做同一个动作的图片属于同一类),保证宠物做表情动作时的连贯性。具体而言,代码实现如下:

'''随机做一个动作'''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

OK,大功告成了~

感谢你能够认真阅读完这篇文章,希望小编分享的"怎么用Python制作一个可以聊天的皮卡丘版桌面宠物"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

宠物 桌面 图片 动作 位置 效果 鼠标 样子 篇文章 皮卡 皮卡丘 代码 图片素材 模块 素材 表情 移动 制作 接下来 主人 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 麻工互联网科技 远拓互联网科技 亿人帮互联网科技 互联网养老 桔豆科技 广西拼得多互联网科技有限公司 互联网公司会议桌创意科技软装饰 互联网科技公司的市场部门 承德科技产业互联网发展 南山科技园互联网公司有哪些 宁夏众和广鑫互联网科技有限公司 玉溪互联网科技怎么选 互联网科技研发水平 996高科技互联网公司 群盈汇互联网科技有限公司 互联网科技实习生岗位 广州千川互联网科技有限公司 互联网科技资金流入 互联网领先科技宣传片 互联网界的黑科技 六子台科技互联网展会 与互联网科技公司 远信互联网科技 百单互联网科技有限公司 中国互联网金融科技基金 剑昆互联网络科技有限公司临桂 厦门千工互联网科技有限公司 互联网5g黑科技有哪些 群盈汇互联网科技有限公司 沐思想互联网科技有限公司 从那以后互联网科技有限公司
0