寫個桌面掛件 | 手把手帶大家做只桌面寵物唄

2021-03-01 Charles的皮卡丘

既然要寫個桌面寵物,首先當然是要找寵物的圖片素材啦。這裡我們使用的是來自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,大功告成了~完整原始碼詳見相關文件。最後的效果見效果展示部分吧~

相關焦點

  • 桌面寵物下載_桌面寵物手機版下載_桌面寵物安卓版免費下載-太平洋...
    桌面寵物 生活工具 大小: 7.74M
  • 【Win + Mac】在你的電腦桌面上養一隻桌面寵物吧!
    給大家分享了很多天的效率神器了,今天來給大家分享一個好玩的桌面寵物,它是一隻,在電腦上養只會搗亂的鵝。軟體適用版本:Windows + MacDesktop Goose 是一個非常有趣的桌面美化工具,啟動該程序後 ,你的電腦上會顯示一隻鵝 ,而這隻鵝會破壞你的桌面。
  • 清理電腦桌面的秘訣,都在這裡了!
    我們收到一份同事發來的Word文檔,從網上保存了幾張圖片,再用PS處理圖片,下載一段視頻素材,結合做了一份PPT,又把PPT更改了幾個版本…… 為了方便找到文件,我們都會習慣性得將文檔都放在桌面上,一開始可能還好。當文件夾、圖片、視頻、PS源文件各種素材堆積在一起以致於幾乎滿屏的時候,我們就開始難受了。
  • 15 個開源示例手把手帶你用 PyQt 做小型桌面應用
    【導語】:想製作屬於自己的桌面應用程式嗎?這有 15 個示例帶你手把手入門。簡介本次將介紹一個用 PyQt 框架和 Python 編寫的 15 個小型桌面應用程式的合集。這其中很多應用程式在 learnpyqt 網站[1]上有更詳細的討論。
  • 虛擬桌面寵物,快來領取你的「小老婆」
    關注「花捲來了」- 星標公眾號最新軟體資源,第一時間送達求求各位打開今日第2篇文章,忽略內容,直接拉到底部,然後退出,不做白嫖黨大家晚上好,今天小花卷為大家帶來的是虛擬桌面寵物,快來領取你的「小老婆」。
  • 手機桌面寵物
    「手機桌面寵物」掃描獲取寵物知識
  • 做個會整理桌面的暖男——物品的收納與桌面的整理
    因此整理效果出色的繞線器、包線管以及纏線管就代替一次性扎扎帶成為用戶整理線材的不錯選擇,這些理線工具可同時對滑鼠、 USB延長線以及電源線進行整理。除了可以將多餘線纜纏繞歸納起來,還能將多餘的線纜整理得井井有條,並起到固定的作用。
  • iOS14桌面小程序來襲!教你高顏值還實用的桌面整理方法!
    iOS14桌面小程序來襲,手把手教你高顏值還實用的整理桌面方法!》iOS14終於閃亮登場了,而這次的更新最大的突破就是小組件了!新的小組件功能,可以利用時鐘、天氣、日曆等各種APP,讓你的手機桌面煥發新生。今天就來帶大家趕潮流,手把手教你兼顧美貌和實用的iOS桌面整理小方法!
  • 抖音桌寵鵝Mac版-Desktop Goose for Mac(抖音網紅桌面寵物鵝)- Mac下載
    Trapcode Particular for Mac(AE 3D粒子系統插件)最近抖音上火起來的桌面寵物鵝如何獲取
  • 如何自製桌面便籤夾,電腦桌面便籤本
    如何自製桌面便籤夾呢?很多人都喜歡自己動手做桌面便籤本。其實這個操作不難,需要準備的材料也很簡單。
  • 你偷窺過設計的桌面嗎?
    不過嘛,人生何苦辣麼認真膩~曬桌面的大概分為這麼幾派,來讓八君為大家點(tu)評(cao)一番:我是設計,為職業審美帶鹽字裡行間的嘚瑟令八君很是雞度啊,這位帥哥的桌面如此環保,綠意朦朧,乃們公司做的是共享汽車不是公益植樹好不好。。。咬手帕。。。
  • 360桌面助手 - 3秒教你快速整理桌面的神器!
    開始之前秋水先問大家一個問題:「你是個愛整理的人嗎?」
  • vivo手機桌面的3個隱藏設置,你知道嗎?
    長按桌面空白處即可調出【桌面掛件】和【滑屏動效】。在桌面掛件中有幾種不同的桌面時鐘可供選擇,在這裡【左右滑動】還可以發現更多的應用掛件,【點擊】即可將它們添加到手機桌面。若桌面沒有足夠的位置,系統會將它們添加到新的一頁,可通過【長按拖動】來擺放它們的位置。
  • 你的電腦桌面一定沒我的漂亮,我賭一塊
    你自己熟悉了哪個圖標在哪個地方還好,但是如果被別人看到你的電腦桌面這個樣子的話:哈哈哈,蜜汁尷尬啊,有木有……所以呢,今天就為大家安利一個小東西,幫我們打理我們的小桌面,首先,請打擊看一下本人的桌面:一般這個掛件在電腦的左上角,你吧滑鼠放到上面一行呢,會如下圖:
  • 大家的桌面上放了些啥?有的人能開動物園了!
    大家的桌面上放了些啥?有的人能開動物園了!喏,不少日曆的粉絲們把桌面打造得有點兒「景觀」的內味兒了,極其賞心悅目!接下來,就請欣賞第一屆物種日曆桌面「景觀」作品大賞,這麼多「風景」,總有能對上眼的~乾枯了,也能拿來點綴生活~@超一自己做的乾花。
  • 【桌面文化】小桌面 大世界
    想要擁有這樣豐滿的桌面嘛!可以自由組合,清爽簡潔,容量很大,一目了然。麻麻讓我每天看著它提醒自己要做個精緻的小姑娘,搞得我有多粗獷似的哼!現在被我用來晾乾粉撲啦哈哈哈化妝棉收納(其實是個茶盒)手託上的字是我寫的他拿去做定製了hhh(賣家居然嫌我字醜我很不服)機械鍵盤打字賊嗨,大家真的可以試一試!三星S7 edge 無線充電器
  • 這才叫實木桌面,教你怎麼做出來,拿去不謝
    說到實木桌面,你應該會想到下圖這種這種也不錯,但逼格不夠高,今天小編就帶你裝逼帶你飛,做一張高逼格的實木桌面1.先搞一截松木,至於你是買還是偷,還是跟光頭強借,這都不重要,但你必須要有把鋸子,好了,言歸正傳該幹活了,木頭直徑大約15-20cm鋸成8cm厚的圓片。
  • 【zFrontier桌面2.0】打造完美桌面的行動綱領
    本來剛好路過想上個車入鍵帽坑,竟然發現有曬桌面活動!我不理!!!先曬一波!!順便說說我的個人桌面布局準則 2.0,希望你們也能擁有。其實是因為我有鼻炎),例如既做集線器又做顯示器的戴爾 2414。⑨為了使用場景和個人習慣去優化桌面布局理由:我的電腦用的最多是 PS 還有寫代碼,所以我需要 2 個屏幕,一個作為主屏,另一個作為寫代碼時候方便還有
  • 「尋找最美桌面」——書桌桌面大比拼
    1號選手:你見過雨後的彩虹嗎?五顏六色,讓人覺得夢幻和幸福。核心core「做一個有溫度的生態人」 這,是我的書桌,也是我的態度~(歡迎大家來pick我,等我的吉祥花開附贈花籽喲)~我在桌面收納的理念是:儘可能多利用立體的空間,所以大家可以看到我買了掛籃,掛籃下的鉤子可以掛夾子、皮筋、口罩等東西;左邊的一些收納盒裡裝日常要用的物品,然後把它們疊起來放置;在右側的柜子上粘上了手機包裝盒,放一些拿取頻繁的東西,我可真是個平凡無奇的廢物利用小天才~
  • 桌面也太單調了吧!讓它擁有鋼鐵俠般酷炫的風格
    ,然後在系統的個性化選項裡把桌面的系統圖標全隱藏了,只在桌面放一個文件夾裡邊放上常用的快捷方式,然後更改一下這個文件夾的圖標……然後再將圖標放到……SAO Utils 就是一款可定製風格的應用啟動器,您可以 :把常用的應用、遊戲以及文件等添加到 啟動器菜單;通過安裝 插件,添加 啟動器主題,或是放置一些掛件到桌面;支持 32 /