pysimplegui之系统托盘图标创建

在 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为预设值之一。

此消息有一个自定义图标。

snag-0286

预设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。

snag-0285

更新

您可以更新 SystemTray 对象中的任何这些项目 * 菜单定义 * 图标 * 工具提示

全部更改或仅更改 1 个。

通知类方法

除了能够通过系统托盘显示消息之外,tkinter 端口还具有能够显示系统托盘消息而无需定义系统托盘对象的附加功能。您可以简单地显示一个通知窗口。这也许消除了使用 ptoaster 包的需要?

该方法是“类方法”,这意味着您可以直接调用它,而无需先创建对象的实例。要显示通知窗口,请调用SystemTray.notify

这行代码

sg.SystemTray.notify('Notification Title', 'This is the notification message')

将显示此窗口,淡入淡出:

图片

这是一个阻塞调用,因此如果您正在淡入和淡出窗口,预计它需要几秒钟。有一些选项可以控制淡入淡出、显示多长时间、alpha 通道等。请参阅本文档末尾的调用签名

posted @   菩提浪子  阅读(1158)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示

目录导航