托盘
Class: Tray
在系统通知区域添加图标和上下文菜单。
进程:主进程
Tray 是一个 EventEmitter。
const { app, Menu, Tray } = require('electron')
let tray = null
app.whenReady().then(() => {
tray = new Tray('/path/to/my/icon')
const contextMenu = Menu.buildFromTemplate([
{ label: 'Item1', type: 'radio' },
{ label: 'Item2', type: 'radio' },
{ label: 'Item3', type: 'radio', checked: true },
{ label: 'Item4', type: 'radio' }
])
tray.setToolTip('This is my application.')
tray.setContextMenu(contextMenu)
})
另请参阅: 关于如何实现托盘菜单的详细指南。
Electron 的内置类不能被用户代码继承。更多信息,请参阅常见问题解答。
平台注意事项
Linux
- 托盘图标默认使用 StatusNotifierItem,当用户桌面环境不支持时,将改用
GtkStatusIcon。 - 当托盘图标接收到用户激活时会发出
click事件,然而 StatusNotifierItem 规范并未指定哪种操作会引起激活,在某些环境中是左键单击,而在某些环境中可能是双击左键。 - 为了使对单个
MenuItem所做的更改生效,您必须再次调用setContextMenu。例如:
const { app, Menu, Tray } = require('electron')
let appIcon = null
app.whenReady().then(() => {
appIcon = new Tray('/path/to/my/icon')
const contextMenu = Menu.buildFromTemplate([
{ label: 'Item1', type: 'radio' },
{ label: 'Item2', type: 'radio' }
])
// Make a change to the context menu
contextMenu.items[1].checked = false
// Call this again for Linux because we modified the context menu
appIcon.setContextMenu(contextMenu)
})
MacOS
- 传递给 Tray 构造函数的图标应该是 模板图像。
- 为确保您的图标在视网膜显示器上不模糊,请确保您的
@2x图像分辨率为 144dpi。 - 如果您正在打包您的应用程序(例如,使用 webpack 进行开发),请确保文件名没有被混淆或哈希。文件名需要以 Template 结尾,并且
@2x图像需要与标准图像具有相同的文件名,否则 macOS 将不会自动反转图像颜色或使用高密度图像。 - 16x16 (72dpi) 和 32x32@2x (144dpi) 对于大多数图标效果都很好。
Windows
- 建议使用
ICO图标以获得最佳视觉效果。
new Tray(image, [guid])
image(NativeImage | string)guidstring (可选) Windows macOS - 用于标识托盘图标的唯一字符串。必须符合 UUID 格式。
Windows
在 Windows 上,如果可执行文件已签名且签名在主题行中包含组织信息,则 GUID 将永久与该签名关联。即使可执行文件的路径发生更改,诸如系统托盘中托盘图标位置之类的操作系统级别设置也将保留。如果可执行文件未经过代码签名,则 GUID 将永久与可执行文件的路径关联。更改可执行文件的路径将导致托盘图标创建失败,必须使用新的 GUID。但是,强烈建议仅在与代码签名可执行文件结合使用时才使用 GUID 参数。如果应用程序定义了多个托盘图标,则每个图标都必须使用单独的 GUID。
MacOS
在 macOS 上,guid 是一个用于唯一标识托盘图标并使其在重新启动后能保留其位置的字符串。为新的托盘项使用相同的字符串将在使用该字符串的先前托盘项的相同位置创建它。
创建与 image 关联的新托盘图标。
实例事件
Tray 模块发出以下事件
Event: 'click'
返回
eventKeyboardEventboundsRectangle - 托盘图标的边界。positionPoint - 事件的位置。
当托盘图标被点击时发出。
请注意,在 Linux 上,当托盘图标收到激活时会发出此事件,这不一定就是左键单击。
Event: 'right-click' macOS Windows
返回
eventKeyboardEventboundsRectangle - 托盘图标的边界。
当托盘图标被右键单击时发出。
Event: 'double-click' macOS Windows
返回
eventKeyboardEventboundsRectangle - 托盘图标的边界。
当托盘图标被双击时发出。
Event: 'middle-click' Windows
返回
eventKeyboardEventboundsRectangle - 托盘图标的边界。
当托盘图标被中键单击时发出。
Event: 'balloon-show' Windows
当托盘气泡显示时发出。
Event: 'balloon-click' Windows
当托盘气泡被点击时发出。
Event: 'balloon-closed' Windows
当托盘气泡因超时或用户手动关闭而被关闭时发出。
Event: 'drop' macOS
当任何被拖动的项目被释放到托盘图标上时发出。
Event: 'drop-files' macOS
返回
eventEventfilesstring[] - 被释放文件的路径。
当被拖动的文件被释放到托盘图标上时发出。
Event: 'drop-text' macOS
返回
eventEventtextstring - 被释放的文本字符串。
当被拖动的文本被释放到托盘图标上时发出。
Event: 'drag-enter' macOS
当拖动操作进入托盘图标时发出。
Event: 'drag-leave' macOS
当拖动操作退出托盘图标时发出。
Event: 'drag-end' macOS
当拖动操作在托盘上结束或在其他位置结束时发出。
Event: 'mouse-up' macOS
返回
eventKeyboardEventpositionPoint - 事件的位置。
当鼠标释放点击托盘图标时发出。
如果您已经使用 tray.setContextMenu 为您的托盘设置了上下文菜单,则此事件不会发出,这是 macOS 级别的限制所致。
Event: 'mouse-down' macOS
返回
eventKeyboardEventpositionPoint - 事件的位置。
当鼠标点击托盘图标时发出。
Event: 'mouse-enter' macOS Windows
返回
eventKeyboardEventpositionPoint - 事件的位置。
当鼠标进入托盘图标时发出。
Event: 'mouse-leave' macOS Windows
返回
eventKeyboardEventpositionPoint - 事件的位置。
当鼠标离开托盘图标时发出。
Event: 'mouse-move' macOS Windows
返回
eventKeyboardEventpositionPoint - 事件的位置。
当鼠标在托盘图标上移动时发出。
实例方法
Tray 类具有以下方法
tray.destroy()
立即销毁托盘图标。
tray.setImage(image)
image(NativeImage | string)
设置与此托盘图标关联的 image。
tray.setPressedImage(image) macOS
image(NativeImage | string)
在 macOS 上,设置此托盘图标被按下时的 image。
tray.setToolTip(toolTip)
toolTipstring
设置此托盘图标的悬停文本。将文本设置为空字符串将删除工具提示。
tray.setTitle(title[, options]) macOS
titlestring
设置状态栏中托盘图标旁显示的标题(支持 ANSI 颜色)。
tray.getTitle() macOS
返回 string - 状态栏中托盘图标旁显示的标题
tray.setIgnoreDoubleClickEvents(ignore) macOS
ignoreboolean
设置忽略双击事件的选项。忽略这些事件可让您检测托盘图标的每一次单独点击。
此值默认为 false。
tray.getIgnoreDoubleClickEvents() macOS
返回 boolean - 是否将忽略双击事件。
tray.displayBalloon(options) Windows
显示一个托盘气泡。
tray.removeBalloon() Windows
移除一个托盘气泡。
tray.focus() Windows
将焦点返回到任务栏通知区域。通知区域图标应在使用此消息来指示它们已完成 UI 操作。例如,如果图标显示快捷菜单,但用户按 ESC 取消,请使用 tray.focus() 将焦点返回到通知区域。
tray.popUpContextMenu([menu, position]) macOS Windows
menuMenu (可选)positionPoint (可选) - 弹出位置。
弹出托盘图标的上下文菜单。当传递 menu 时,将显示 menu 而不是托盘图标的上下文菜单。
position 仅在 Windows 上可用,默认为 (0, 0)。
tray.closeContextMenu() macOS Windows
关闭打开的上下文菜单,该菜单是通过 tray.setContextMenu() 设置的。
tray.setContextMenu(menu)
menuMenu | null
为此图标设置上下文菜单。
tray.getBounds() macOS Windows
返回 Rectangle
此托盘图标的 bounds,作为 Object。
tray.getGUID() macOS Windows
返回 string | null - 用于唯一标识托盘图标并使其在重新启动后能保留其位置的 GUID,如果未设置,则返回 null。
tray.isDestroyed()
返回 boolean - 托盘图标是否已被销毁。
平台注意事项
Linux
- 托盘图标默认使用 StatusNotifierItem,当用户桌面环境不支持时,将改用
GtkStatusIcon。 - 当托盘图标接收到用户激活时会发出
click事件,然而 StatusNotifierItem 规范并未指定哪种操作会引起激活,在某些环境中是左键单击,而在某些环境中可能是双击左键。 - 为了使对单个
MenuItem所做的更改生效,您必须再次调用setContextMenu。例如:
const { app, Menu, Tray } = require('electron')
let appIcon = null
app.whenReady().then(() => {
appIcon = new Tray('/path/to/my/icon')
const contextMenu = Menu.buildFromTemplate([
{ label: 'Item1', type: 'radio' },
{ label: 'Item2', type: 'radio' }
])
// Make a change to the context menu
contextMenu.items[1].checked = false
// Call this again for Linux because we modified the context menu
appIcon.setContextMenu(contextMenu)
})
macOS
- 传递给 Tray 构造函数的图标应该是 模板图像。
- 为确保您的图标在视网膜显示器上不模糊,请确保您的
@2x图像分辨率为 144dpi。 - 如果您正在打包您的应用程序(例如,使用 webpack 进行开发),请确保文件名没有被混淆或哈希。文件名需要以 Template 结尾,并且
@2x图像需要与标准图像具有相同的文件名,否则 macOS 将不会自动反转图像颜色或使用高密度图像。 - 16x16 (72dpi) 和 32x32@2x (144dpi) 对于大多数图标效果都很好。
Windows
- 建议使用
ICO图标以获得最佳视觉效果。