这篇文章给大家聊聊关于宠物网站模板源码分享下载,以及宠物网站制作对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
今天分享个Python实战小项目,久违的实用教程!
同时,也有不少小伙伴问过我,怎么打包Python程序为exe可执行文件,正好今天的实战一起讲解。
用Python做个属于自己的宠物桌面,对原理和代码进行了详细讲解,非常适合新手~
(▁▂▃▅▆▇源码&文件???私?“求分享”▇▆▅▃▂▁)
一、桌面宠物素材
1.1需要准备什么素材
桌面宠物的各种动画效果,可以看作是由一个个GIF动图拼接而成,我们需要准备多组GIF动图来实现桌面宠物的动作切换。
最好选取是白底的GIF动图。
1.2介绍几种获得GIF动图的方式
1.2.1通过pr实现视频转GIF
pr在导出的时候选择动画GIF可以直接导出GIF动图。
当然了想要白底就需要自己用“蒙版”和画笔工具自己抠图。
1.2.2通过ps实现图片组转GIF
ps会高级一点,首先点击最上方的窗口,再点击时间轴,在下方显示出的时间轴的最右边的加号可以添加你想要添加的图片。图层右边可以选择删除背景。
然后选择最上方的文件,选择导出,选择导出为web所用格式旧版,即可。
1.2.3百度一下,获取网上现成的GIF资源
1)百度:“制作GIF动图”
2)百度:“GIF动图资源”
或者干脆找个2D游戏素材网站也行,里面有很多角色人物素材在里面。
(▁▂▃▅▆▇源码&文件???私?“求分享”▇▆▅▃▂▁)
二、python实现代码
2.1目录结构
项目的目录结构整体如下:main.py为主程序代码。
normal下的GIF图是宠物平常会随机切换的动作GIF图,click下面的GIF图是点击宠物之后的宠物动作的GIF图。
dialog.txt记录了宠物的对话信息。
tigerIcon.jpg是缩小到托盘后托盘图标的图片。
2.2实现代码
2.2.1引用包
os包用于加载文件,sys包用于退出程序,random包用于程序中一些需要调用随机数的操作。其他的三个包则是用于实现桌面宠物的基础。
\nimportos\nimportsys\nimportrandom\nfromPyQt5.QtGuiimport*\nfromPyQt5.QtCoreimport*\nfromPyQt5.QtWidgetsimport*\n
2.2.2主代码部分
\nif__name__==&39;:\n所有的PyQt5应用必须创建一个应用(Application)对象。sys.argv参数是一个来自命令行的参数列表。\napp=QApplication(sys.argv)\n1.进入时间循环;\n3.QT接收和处理用户及系统交代的事件(消息),并传递到各个窗口;\n窗体初始化\nself.init()\n宠物静态gif图加载\nself.initPetImage()\n窗体初始化\ndefinit(self):\n设置窗口属性:窗口无标题栏且固定在最前面\nWindowStaysOnTopHint:窗口总显示在最上面\nhttps://blog.csdn.net/kaida1234/article/details/79863146\nself.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint|Qt.SubWindow)\n窗口透明,窗体空间不透明\nself.setAttribute(Qt.WA_TranslucentBackground,True)\n(▁▂▃▅▆▇源码???私?“求分享”自取▇▆▅▃▂▁)\n导入准备在托盘化显示上使用的图标\nicons=os.path.join(&39;)\n菜单项退出,点击后调用quit函数\nquit_action=QAction(&39;,self,triggered=self.quit)\n菜单项显示,点击后调用showing函数\nshowing=QAction(u&39;,self,triggered=self.showwin)\n在菜单栏添加一个无子菜单的菜单项‘退出’\nself.tray_icon_menu.addAction(quit_action)\nQSystemTrayIcon类为应用程序在系统托盘中提供一个图标\nself.tray_icon=QSystemTrayIcon(self)\n设置托盘化菜单项\nself.tray_icon.setContextMenu(self.tray_icon_menu)\n退出操作,关闭程序\ndefquit(self):\nself.close()\nsys.exit()\n
其中‘显示’项涉及到的函数代码如下:
setWindowOpacity()设置窗体的透明度,通过调整窗体透明度实现宠物的展示和隐藏\nself.setWindowOpacity(1)\n
3、宠物静态资源的加载,通过函数initPetImage实现,其代码配置如下:
静态资源的加载主要涉及两个部分,对话框内容的加载和图片内容的加载。
宠物静态gif图加载\ndefinitPetImage(self):\n对话框样式设计\nself.talkLabel.setStyleSheet(&39;楷体&34;)\nQMovie是一个可以存放动态视频的类,一般是配合QLabel使用的,可以用来存放GIF动态图\nself.movie=QMovie(&34;)\n将Qmovie在定义的image中显示\nself.image.setMovie(self.movie)\nself.movie.start()\nself.resize(1024,1024)\n展示\nself.show()\n将宠物正常待机状态的动图放入pet1中\nself.pet1=[]\nforiinos.listdir(&34;):\nself.pet1.append(&34;+i)\n读取目录下dialog文件\nwithopen(&34;,&34;)asf:\ntext=f.read()\n34;\\n&宠物随机位置\ndefrandomPosition(self):\n获取窗口坐标系\npet_geo=self.geometry()\nwidth=(screen_geo.width()-pet_geo.width())*random.random()\nheight=(screen_geo.height()-pet_geo.height())*random.random()\nself.move(width,height)\n
4、宠物正常待机,实现随机切换动作,对话框通过函数petNormalAction实现,其代码配置如下
这里通过QTimer实现定时操作,到达设置的时间即调用相关的函数。其中condition为标识宠物状态的flag,0为平常状态,1为点击状态,这个状态可按照自己的喜好拓展。talk_condition同理,为标识宠物对话状态的flag。
每隔一段时间做个动作\n时间到了自动执行\nself.timer.timeout.connect(self.randomAct)\n宠物状态设置为正常\nself.condition=0\n对话状态设置为常态\nself.talk_condition=0\n随机动作切换\ndefrandomAct(self):\n随机选择装载在pet1里面的gif图进行展示,实现随机切换\nself.movie=QMovie(random.choice(self.pet1))\n将动画添加到label中\nself.image.setMovie(self.movie)\ncondition不为0,转为切换特有的动作,实现宠物的点击反馈\n读取特殊状态图片路径\nself.movie=QMovie(&34;)\n将动画添加到label中\nself.image.setMovie(self.movie)\n宠物状态设置为正常待机\nself.condition=0\nself.talk_condition=0\n\ntalk_condition为0则选取加载在dialog中的语句\nself.talkLabel.setText(random.choice(self.dialog))\n34;font:bold;&34;font:25pt&39;;&34;color:white;&34;background-color:white&34;url(:/)&根据内容自适应大小\nself.talkLabel.adjustSize()\nelse:\n34;别点我&34;font:bold;&34;font:25pt&39;;&34;color:white;&34;background-color:white&34;url(:/)&设置为正常状态\nself.talk_condition=0\n
5、实现能够拖动宠物,通过多个自带函数实现,其代码配置如下:
实现宠物的拖动主要通过三个函数实现,mouserPressEvent负责在鼠标点击判断其是否在宠物窗口上,如果在则将宠物和鼠标的位置绑定,并执行点击改变宠物GIF图和对话框的操作。
mouseMoveEvent实现按下后宠物跟着鼠标移动
mouseReleaseEvent将之前的锁定取消
更改宠物状态为点击\nself.condition=1\n即可调用对话状态改变\nself.talk()\nglobalPos()事件触发点相对于桌面的位置\n拖动时鼠标图形的设置\nself.setCursor(QCursor(Qt.OpenHandCursor))\n\n如果鼠标左键按下,且处于绑定状态\nifQt.LeftButtonandself.is_follow_mouse:\n鼠标释放调用,取消绑定\ndefmouseReleaseEvent(self,event):\nself.is_follow_mouse=False\n宠物右键点击交互\ndefcontextMenuEvent(self,event):\n定义菜单项\nquitAction=menu.addAction(&34;)\nhide=menu.addAction(&34;)\n点击事件为退出\nifaction==quitAction:\nqApp.quit()\n通过设置透明度方式隐藏宠物\nself.setWindowOpacity(0)\n
7、鼠标移到宠物上的时候显示为闭合的手
设置鼠标形状Qt.ClosedHandCursor非指向手\nself.setCursor(Qt.ClosedHandCursor)\n
2.2.3完整源码
importos\nimportsys\nimportrandom\nfromPyQt5.QtGuiimport*\nfromPyQt5.QtCoreimport*\nfromPyQt5.QtWidgetsimport*\n窗体初始化\nself.init()\n宠物静态gif图加载\nself.initPetImage()\n窗体初始化\ndefinit(self):\n设置窗口属性:窗口无标题栏且固定在最前面\nWindowStaysOnTopHint:窗口总显示在最上面\nhttps://blog.csdn.net/kaida1234/article/details/79863146\nself.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint|Qt.SubWindow)\n窗口透明,窗体空间不透明\nself.setAttribute(Qt.WA_TranslucentBackground,True)\n托盘化设置初始化\ndefinitPall(self):\n39;tigerIcon.jpg&设置右键显示最小化的菜单项\n39;退出&设置这个点击选项的图片\nquit_action.setIcon(QIcon(icons))\n39;显示&新建一个菜单项控件\nself.tray_icon_menu=QMenu(self)\n在菜单栏添加一个无子菜单的菜单项‘显示’\nself.tray_icon_menu.addAction(showing)\n设置托盘化图标\nself.tray_icon.setIcon(QIcon(icons))\n展示\nself.tray_icon.show()\n\n对话框定义\nself.talkLabel=QLabel(self)\n34;font:15pt&39;;border-width:1px;color:blue;&定义显示图片部分\nself.image=QLabel(self)\n34;normal/normal1.gif&设置标签大小\nself.movie.setScaledSize(QSize(200,200))\n调用自定义的randomPosition,会使得宠物出现位置随机\nself.randomPosition()\nhttps://new.qq.com/rain/a/20211014a002rs00\n34;normal&34;normal/&将宠物正常待机状态的对话放入pet2中\nself.dialog=[]\n34;dialog.txt&34;r&以\\n即换行符为分隔符,分割放进dialog中\nself.dialog=text.split(&34;)\n\n每隔一段时间做个动作\n时间到了自动执行\nself.timer.timeout.connect(self.randomAct)\n宠物状态设置为正常\nself.condition=0\n对话状态设置为常态\nself.talk_condition=0\n随机动作切换\ndefrandomAct(self):\n随机选择装载在pet1里面的gif图进行展示,实现随机切换\nself.movie=QMovie(random.choice(self.pet1))\n将动画添加到label中\nself.image.setMovie(self.movie)\ncondition不为0,转为切换特有的动作,实现宠物的点击反馈\n读取特殊状态图片路径\nself.movie=QMovie(&34;)\n将动画添加到label中\nself.image.setMovie(self.movie)\n宠物状态设置为正常待机\nself.condition=0\nself.talk_condition=0\n\ntalk_condition为0则选取加载在dialog中的语句\nself.talkLabel.setText(random.choice(self.dialog))\n34;font:bold;&34;font:25pt&39;;&34;color:white;&34;background-color:white&34;url(:/)&根据内容自适应大小\nself.talkLabel.adjustSize()\nelse:\n34;别点我&34;font:bold;&34;font:25pt&39;;&34;color:white;&34;background-color:white&34;url(:/)&设置为正常状态\nself.talk_condition=0\n\n显示宠物\ndefshowwin(self):\n宠物随机位置\ndefrandomPosition(self):\nscreen_geo=QDesktopWidget().screenGeometry()\npet_geo=self.geometry()\nwidth=(screen_geo.width()-pet_geo.width())*random.random()\nheight=(screen_geo.height()-pet_geo.height())*random.random()\nself.move(width,height)\n\n更改宠物状态为点击\nself.condition=1\n即可调用对话状态改变\nself.talk()\nglobalPos()事件触发点相对于桌面的位置\n拖动时鼠标图形的设置\nself.setCursor(QCursor(Qt.OpenHandCursor))\n\n如果鼠标左键按下,且处于绑定状态\nifQt.LeftButtonandself.is_follow_mouse:\n鼠标释放调用,取消绑定\ndefmouseReleaseEvent(self,event):\nself.is_follow_mouse=False\n鼠标移进时调用\ndefenterEvent(self,event):\n宠物右键点击交互\ndefcontextMenuEvent(self,event):\n定义菜单项\nquitAction=menu.addAction(&34;)\nhide=menu.addAction(&34;)\n点击事件为退出\nifaction==quitAction:\nqApp.quit()\n通过设置透明度方式隐藏宠物\nself.setWindowOpacity(0)\n\n\nif__name__==&39;:\n所有的PyQt5应用必须创建一个应用(Application)对象。sys.argv参数是一个来自命令行的参数列表。\napp=QApplication(sys.argv)\n1.进入时间循环;\n3.QT接收和处理用户及系统交代的事件(消息),并传递到各个窗口;\n#4.程序遇到exit()退出时,机会返回exec()的值。\nsys.exit(app.exec_())\n
三、程序打包
3.1安装pyinstaller
pipinstallpyinstaller\n
如果提示黄色提示pip版本问题,照着上面的提示修改即可。
3.2项目目录下完成打包
进入打开cmd命令行,进入项目目录,输入命令
pyinstaller-F-wmain.py\n
打包完成后,在生成的dist里面可以看到main.exe文件。
将main.exe放到主目录下就可正常运行。
(▁▂▃▅▆▇源码&文件???私?“求分享”自取▇▆▅▃▂▁)
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!