在 PySimpleGUI(tkinter 版本)上運行時,系統托盤圖標為 PNG 和 GIF 格式。PNG、GIF 和 ICO 格式適用於 Wx 和 Qt 端口。
指定“圖標”時,可以使用 3 種不同的格式。* filename
- 文件名 * data_base64
- base64 字節字符串 * ' data
- 內存位圖或其他“原始”圖像
您將在初始化語句和更新方法中找到用於指定這 3 個選項的 3 個參數。
對於測試,您可能會發現使用內置的 PySimpleGUI 圖標是一個很好的起點,以確保在引入外部圖像資產之前已正確編碼所有內容。如果您的圖標文件有問題,它會很快告訴您。要使用默認圖標運行,請使用以下內容創建系統托盤:
tray = sg.SystemTray(menu=menu_def, data_base64=sg.DEFAULT_BASE64_ICON)
菜單定義
menu_def = ['BLANK', ['&Open', '&Save', ['1', '2', ['a', 'b']], '!&Properties', 'E&xit']]
使用列表定義菜單。“菜單條目”是一個字符串,它指定: * 顯示的文本 * 鍵盤快捷鍵 * 鍵
有關在菜單中使用鍵的更多信息,請參閱菜單鍵部分。
沒有鍵和鍵盤快捷鍵的條目是一個簡單的字符串 'Menu Item'
如果您想讓“M”成為鍵盤快捷鍵,&
請在作為快捷鍵的字母前面放置一個。 '&Menu Item'
您可以添加“鍵”以使菜單項獨一無二,或者作為標識菜單項的另一種方式,而不是顯示的文本。通過放置::
在文本之后,鍵被添加到文本部分。
'Menu Item::key'
第一個條目可以忽略。'BLANK
' 被選為本例。之所以這樣,是因為通常您會在菜單欄上的某個標題下指定這些菜單。但是這里沒有標題,所以它填充了你想要的任何值。
分隔符 如果您想要兩個項目之間的分隔符,請添加條目'---'
,它將在菜單中的該位置添加一個分隔符項。
禁用的菜單項
如果要禁用菜單條目,!
請在菜單條目之前放置 a
系統托盤方法
閱讀 - 閱讀上下文菜單或檢查事件
def Read(timeout=None) ''' Reads the context menu :param timeout: Optional. Any value other than None indicates a non-blocking read :return: String representing meny item chosen. None if nothing read. '''
該timeout
參數指定等待事件發生的時間。如果在超時期限內沒有發生任何事情,則返回“超時事件”。這些類型的讀取使得異步運行成為可能。要以非阻塞方式運行,timeout=0
請在 Read 調用上指定。
讀取返回所選菜單項的菜單文本,並帶有鍵。如果您指定Open::key
為菜單項,並且用戶單擊Open
,那么您將Open::key
在讀取完成后收到字符串。
讀取特殊返回值
除了菜單項之外,Read 調用還可以返回幾個特殊值。他們包括:
EVENT_SYSTEM_TRAY_ICON_DOUBLE_CLICKED - 托盤圖標被雙擊 EVENT_SYSTEM_TRAY_ICON_ACTIVATED - 托盤圖標被單擊 EVENT_SYSTEM_TRAY_MESSAGE_CLICKED - 消息氣球被點擊 如果沒有事件可用,則返回 TIMEOUT_KEY 如果在讀取調用中設置了超時值
隱藏
隱藏圖標。請注意,隱藏圖標時不會顯示消息氣球。
def Hide()
關閉
和 hide 做同樣的事情
def Close()
取消隱藏
顯示以前隱藏的圖標
def UnHide()
顯示消息
在系統托盤區域的圖標上方顯示一個氣球。您可以指定自己的圖標顯示在氣球中,也可以設置messageicon
為預設值之一。
此消息有一個自定義圖標。
預設messageicon
值為:
SYSTEM_TRAY_MESSAGE_ICON_INFORMATION SYSTEM_TRAY_MESSAGE_ICON_WARNING SYSTEM_TRAY_MESSAGE_ICON_CRITICAL SYSTEM_TRAY_MESSAGE_ICON_NOICON
ShowMessage(title, message, filename=None, data=None, data_base64=None, messageicon=None, time=10000): ''' Shows a balloon above icon in system tray :param title: Title shown in balloon :param message: Message to be displayed :param filename: Optional icon filename :param data: Optional in-ram icon :param data_base64: Optional base64 icon :param time: How long to display message in milliseconds :return: '''
請注意,在 Windows 上,可能需要更改注冊表才能看到消息氣球。要解決此問題,您必須創建在此屏幕截圖中看到的 DWORD。
更新
您可以更新 SystemTray 對象中的任何這些項目 * 菜單定義 * 圖標 * 工具提示
全部更改或僅更改 1 個。
通知類方法
除了能夠通過系統托盤顯示消息之外,tkinter 端口還具有能夠顯示系統托盤消息而無需定義系統托盤對象的附加功能。您可以簡單地顯示一個通知窗口。這也許消除了使用 ptoaster 包的需要?
該方法是“類方法”,這意味着您可以直接調用它,而無需先創建對象的實例。要顯示通知窗口,請調用SystemTray.notify
。
這行代碼
sg.SystemTray.notify('Notification Title', 'This is the notification message')
將顯示此窗口,淡入淡出:
這是一個阻塞調用,因此如果您正在淡入和淡出窗口,預計它需要幾秒鍾。有一些選項可以控制淡入淡出、顯示多長時間、alpha 通道等。請參閱本文檔末尾的調用簽名