91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2022-03-05 14:05:19 來源:億速云 閱讀:295 作者:小新 欄目:開發技術

這篇文章主要介紹了怎么用Python制作一個可以聊天的皮卡丘版桌面寵物,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

開發工具

Python版本:3.6.4

相關模塊:

PyQt5模塊;

以及一些Python自帶的模塊

原理簡介

既然要寫個桌面寵物,首先當然是要找寵物的圖片素材啦。這里我們使用的是來自shimiji這款手機APP上的寵物圖片素材,例如皮卡丘:

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

我下了大約60多種寵物的圖片素材供大家選擇:

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

在相關文件里都打包一起提供了,所以這里就不分享爬蟲代碼了(我挑選了一下,只要不是我覺得特別丑的,我基本都保留了),別給人家服務器帶來不必要的壓力。

接下來,我們就可以開始設計我們的桌面寵物啦。鑒于網上用python寫的桌面掛件基本都是基于tkinter的,為了突出公眾號的與眾不同,這里我們采用PyQt5來實現我們的桌面寵物。

步驟實現

首先,我們來初始化一個桌面寵物的窗口組件:

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

它的效果是這樣子的:

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

接下來,我們設置一下窗口的屬性讓更適合作為一個寵物的窗口:

# 初始化
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)

現在,運行我們的程序時,效果是這樣子的:

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

好像蠻不錯的呢~等等,好像有問題,重新設置了窗口屬性之后,這玩意咋退出啊?在寵物右上角加個×這樣的符號又好像很奇怪?

別急,我們可以給我們的桌面寵物添加一個托盤圖標,以實現桌面寵物程序的退出功能:

# 設置退出選項
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()

效果是這樣子的:

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

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))

效果如下:

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

哈哈,越來越像樣了呢~最后,作為一個活潑的寵物,你不能這么呆板,一動也不動吧?好歹要學會做做表情逗主人開心吧?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制作一個可以聊天的皮卡丘版桌面寵物”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大厂| 米易县| 虎林市| 隆安县| 平顶山市| 临江市| 房产| 柘城县| 青河县| 宜城市| 和平区| 资溪县| 共和县| 珲春市| 宣化县| 上虞市| 道孚县| 广东省| 鹤山市| 宁远县| 洪湖市| 周宁县| 绍兴市| 维西| 吉木萨尔县| 迁西县| 元氏县| 都安| 桓仁| 娄底市| 句容市| 穆棱市| 霸州市| 拉萨市| 奉贤区| 鲜城| 自治县| 吉水县| 延川县| 白山市| 叙永县|