用Python实现自制桌面宠物,变出一个桌面小挂件
前言
就喜歡自己自定義一些小玩意,今天就來分享一些制作桌面寵物的素材,還有代碼
相關文件
聲明:圖片素材源于網絡,侵歉刪。
開發工具
Python版本:3.6.4
相關模塊:
PyQt5模塊;
以及一些Python自帶的模塊。
環境搭建安裝
Python并添加到環境變量,pip安裝需要的相關模塊即可。
原理簡介
既然要寫個桌面寵物,首先當然是要找寵物的圖片素材啦。這里我們使用的是來自shimiji這款手機APP上的寵物圖片素材,例如皮卡丘:
我下了大約60多種寵物的圖片素材供大家選擇:
在相關文件里都打包一起提供了,所以這里就不分享爬蟲代碼了(我挑選了一下,只要不是我覺得特別丑的,我基本都保留了),別給人家服務器帶來不必要的壓力。
接下來,我們就可以開始設計我們的桌面寵物啦。鑒于網上用python寫的桌面掛件基本都是基于tkinter的,為了突出公眾號的與眾不同,這里我們采用PyQt5來實現我們的桌面寵物。
初始化窗口組件
首先,我們來初始化一個桌面寵物的窗口組件:
class DesktopPet(QWidget):def __init__(self, parent=None, **kwargs):super(DesktopPet, self).__init__(parent)self.show()它的效果是這樣子的:
設置窗口屬性
接下來,我們設置一下窗口的屬性讓更適合作為一個寵物的窗口:
python學習交流Q群:309488165 ### 源碼領取 # 初始化 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 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,這樣好像有模有樣了呢~但是好像還是不太對的樣子,這寵物每次在桌面生成的位置是隨機的,但是我們卻無法調整這個寵物的位置,這顯然不合理,作為一個桌面寵物,你肯定不能在妨礙主人工作的位置啊!
實現鼠標控制
要不我們來寫一下鼠標按下、移動以及釋放時的函數吧,這樣就可以用鼠標拖動它了
- 鼠標左鍵按下時, 寵物將和鼠標位置綁定
- 鼠標移動, 則寵物也移動
- 鼠標釋放時, 取消綁定
效果如下:
設置一個定時器:
我們還可以自己定時,讓他更換表情啥的
# 每隔一段時間做個動作 self.timer = QTimer() self.timer.timeout.connect(self.randomAct) self.timer.start(500)保持做表情動作的連貫性
定時器每隔一段時間切換一下選中的寵物的圖片,以達到寵物做表情動作的動畫效果(視頻是一幀幀的圖片組成的這種基礎內容就不需要我來科普了吧)。當然,這里我們必須對圖片進行動作分類(在做同一個動作的圖片屬于同一類),保證寵物做表情動作時的連貫性。
- 隨機做一個動作
- 完成動作的每一幀
ok,大功告成~ 完整源代碼詳見相關文件。最后的效果見效果展示部分吧
最后效果展示
完整 源碼 點擊 此處 領取 即可
在cmd窗口運行如下命令即可:
python DesktopPet.py效果如下:
本來是動態圖的不知為何就是展示不出來只能截圖給大家看了!!
最后
朋友們學習python,有時候不知道怎么學,從哪里開始學。掌握了基本的一些語法或者做了兩個案例后,不知道下一步怎么走,不知道如何去學習更加高深的知識。
那么對于這些朋友們,我準備了大量的免費視頻教程,PDF電子書籍,以及源代碼!直接在文末名片自取即可哦!
好啦,今天的分享到這里就結束了 ~
對文章有問題的,或者有其他關于python的問題,可以在評論區留言或者私信我哦
覺得我分享的文章不錯的話,可以關注一下我,或者給文章點贊(/≧▽≦)/
總結
以上是生活随笔為你收集整理的用Python实现自制桌面宠物,变出一个桌面小挂件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安能上市,德邦“隐身”
- 下一篇: 盛大进军电子书被视搅局者