用wxpython實現(xiàn)TaskBarIcon(系統(tǒng)托盤圖標)

wxpython中的wx.adv.TaskBarIcon類可以用來實現(xiàn)TaskBarIcon——就是在系統(tǒng)托盤區(qū)顯示一個圖標,點擊的時候會出現(xiàn)一個菜單。在鼠標放上去的時候,它還可以顯示一些提示信息。

一個最常見的例子:Windows系統(tǒng)自帶的Speaker。


image.png

根據wxpython的官方文檔,TaskBarIcon支持處理以下的事件:

  • EVT_TASKBAR_MOVE: 移動
  • EVT_TASKBAR_LEFT_DOWN: 按下鼠標左鍵
  • EVT_TASKBAR_LEFT_UP: 按下鼠標左鍵后松開
  • EVT_TASKBAR_RIGHT_DOWN: 按下鼠標右鍵
  • EVT_TASKBAR_RIGHT_UP: 按下鼠標右鍵后松開
  • EVT_TASKBAR_LEFT_DCLICK: 雙擊鼠標左鍵
  • EVT_TASKBAR_RIGHT_DCLICK: 雙擊鼠標右鍵
  • EVT_TASKBAR_CLICK: 根據系統(tǒng)的不同,這個等同于EVT_TASKBAR_RIGHT_DOWN或者wx.UP。

它提供的方法有:

方法 描述
__init__ 構造函數.
CreatePopupMenu 鼠標右鍵點擊圖標時會調用這個函數。由這個函數來生成動態(tài)菜單。
Destroy 類似于wx.Window.Destroy。可以讓系統(tǒng)托盤圖標在毀滅前處理一些還在等待的事件。
IsAvailable 如果系統(tǒng)托盤是可用的,返回True。
IsIconInstalled 如果SetIcon被調用,而RemoveIcon沒有接著被調用,返回True。
IsOk 如果對象初始化成功,返回True。
PopupMenu 在當前鼠標光標所在位置彈出一個菜單。官方文檔更建議使用CreatePopupMenu而不是PopupMenu.
RemoveIcon 將之前用SetIcon設置的圖標移除。
SetIcon 設置一個圖標,另外還可以設置提示。
ShowBalloon 在有圖標的前提下,顯示一個氣泡提示,這個只在Windows系統(tǒng)下支持。

以上方法更具體的說明請參考官方文檔:https://wxpython.org/Phoenix/docs/html/wx.adv.TaskBarIcon.html

通常,TaskBarIcon類的用法是創(chuàng)建一個類,繼承wx.adv.TaskBarIcon,再在這個子類里面重寫CreatePopupMenu方法,來自定義鼠標右鍵點擊時出現(xiàn)的動態(tài)菜單。菜單的實現(xiàn)方法是:先用wx.Menu()創(chuàng)建一個菜單,再把菜單項加載上去。然后把每個菜單項的事件綁定一個函數,再定義這些函數。

下面我們來簡單試試。

# -*- coding: utf-8 -*-

import wx
import wx.adv


class FolderBookmarkTaskBarIcon(wx.adv.TaskBarIcon):
    ICON = 'watermelon_32px.ico'
    TITLE = '測試系統(tǒng)托盤圖標'

    MENU_ID1, MENU_ID2 = wx.NewIdRef(count=2)

    def __init__(self):
        super().__init__()

        # 設置圖標和提示
        self.SetIcon(wx.Icon(self.ICON), self.TITLE)

        # 綁定菜單項事件
        self.Bind(wx.EVT_MENU, self.onOne, id=self.MENU_ID1)
        self.Bind(wx.EVT_MENU, self.onExit, id=self.MENU_ID2)

    def CreatePopupMenu(self):
        '''生成菜單'''

        menu = wx.Menu()
        # 添加兩個菜單項
        menu.Append(self.MENU_ID1, '彈個框')
        menu.Append(self.MENU_ID2, '退出')
        return menu

    def onOne(self, event):
        wx.MessageBox('111')

    def onExit(self, event):
        wx.Exit()


class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__()
        FolderBookmarkTaskBarIcon()


class MyApp(wx.App):
    def OnInit(self):
        MyFrame()
        return True


if __name__ == "__main__":
    app = MyApp()
    app.MainLoop()

運行后會在系統(tǒng)欄出現(xiàn)一個小圖標(我放在同一目錄下的watermelon_32px.ico是一個小西瓜)。


image.png

把鼠標放上去會顯示“測試系統(tǒng)托盤圖標”。
右鍵一點,會出現(xiàn)這樣的菜單:


image.png

點“彈個框”,調用onOne,出現(xiàn)一個消息框:
image.png

點“退出”,系統(tǒng)托盤圖標消失,程序退出。

以上就是wx.adv.TaskBarIcon最基礎的使用方法演示。

References:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容