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: