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)
})
平台注意事项
Linux
- Tray icon uses StatusNotifierItem by default, when it is not available in user's desktop environment the
GtkStatusIcon
will be used instead. - The
click
event is emitted when the tray icon receives activation from user, however the StatusNotifierItem spec does not specify which action would cause an activation, for some environments it is left mouse click, but for some it might be double left mouse click. - 为了使改变对个别的
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
- Icons passed to the Tray constructor should be Template Images.
- 为了确保您的图标在视网膜监视器不模糊,请确认你的
@2x
图片是 144dpi 。 - 如果您正在打包的你的应用程序(例如,使用 webpack 开发),请确保文件名没有被破坏或哈希。 文件名需要以 Template 单词结尾,同时
@2x
图片需要与标准图片文件名相同 ,否则 MacOS 不会神奇地反转图片的颜色或使用高分图片。 - 16x16 (72dpi) 和 32x32@2x (144dpi) 适合大多数图标。
Windows
- 建议使用
ICO
图标获取最佳视觉效果。
new Tray(image, [guid])
image
(NativeImage | string)guid
string (可选) Windows - 将 GUID 分配给托盘图标。 如果执行文件已签名,并且签名在主题行中包含组织,则 GUID 将永久关联该签名。 操作系统级别设置将保持不变,如托盘图标在系统托盘中的位置,即使可执行文件的路径发生更改。 如果执行文件未签名,则 GUID 将与执行文件的路径永久关联。 更改执行文件的路径将阻止托盘图标的创建,必须使用新的 GUID。 然而,强烈建议仅在结合代码签名的执行文件时,使用 GUID 参数。 如果应用定义了多个托盘图标,则每个图标必须使用单独的 GUID。
创建与image
关联的新任务栏图标。
实例事件
Tray
对象会发出以下事件:
事件: 'click'
返回:
event
KeyboardEventbounds
Rectangle - 系统托盘图标的边界。position
Point - 事件的位置信息。
当该图标被点击时触发。
Note that on Linux this event is emitted when the tray icon receives an activation, which might not necessarily be left mouse click.
Event: 'right-click' macOS Windows
返回:
event
KeyboardEventbounds
Rectangle - 系统托盘图标的边界。
当该图标被右击时触发。
Event: 'double-click' macOS Windows
返回:
event
KeyboardEventbounds
Rectangle - 系统托盘图标的边界。
当该图标被双击时触发。
Event: 'middle-click' Windows
返回:
event
KeyboardEventbounds
Rectangle - 系统托盘图标的边界。
Emitted when the tray icon is middle clicked.
Event: 'balloon-show' Windows
当系统托盘图标气泡显示时,触发该事件。
Event: 'balloon-click' Windows
当系统托盘气泡被点击时,触发该事件。
Event: 'balloon-closed' Windows
当系统托盘气泡因为超时被关闭或者用户手动关闭时,触发该事件。
Event: 'drop' macOS
当有任何拖动项拖到该任务栏图标上时,触发该事件。
Event: 'drop-files' macOS
返回:
event
Eventfiles
string[] - 拖至任务栏图标上的文件的路径。
当有任何文件被拖到该任务栏图标上时,触发该事件。
Event: 'drop-text' macOS
返回:
event
Eventtext
string - 拖至任务栏图标上的文字内容。
当有任何文字被拖到该任务栏图标上时,触发该事件。
Event: 'drag-enter' macOS
当有任何拖动操作进入(拖动未结束)该任务栏图标时,触发该事件。
Event: 'drag-leave' macOS
当有任何拖动操作离开该任务栏图标时,触发该事件。
Event: 'drag-end' macOS
当有任何拖动操作在托盘或其他地方结束时,触发该事件。
Event: 'mouse-up' macOS
返回:
event
KeyboardEventposition
Point - 事件的位置信息。
当鼠标从单击托盘图标中释放时发出。
注意:如果您使用 tray.setContextMenu
为托盘设置了右键菜单,则不会触发此事件,这是由于 macOS-level 的约束。
Event: 'mouse-down' macOS
返回:
event
KeyboardEventposition
Point - 事件的位置信息。
鼠标点击托盘图标 时触发。
Event: 'mouse-enter' macOS Windows
返回:
event
KeyboardEventposition
Point - 事件的位置信息。
当鼠标进入该任务栏图标时,触发该事件。
Event: 'mouse-leave' macOS Windows
返回:
event
KeyboardEventposition
Point - 事件的位置信息。
当鼠标离开该任务栏图标时,触发该事件。
Event: 'mouse-move' macOS Windows
返回:
event
KeyboardEventposition
Point - 事件的位置信息。
当鼠标在该任务栏图标上移动时,触发该事件。
实例方法
Tray
类拥有以下方法:
tray.destroy()
立即销毁该任务栏图标
tray.setImage(image)
image
(NativeImage | string)
设置image
作为托盘中显示的图标
tray.setPressedImage(image)
macOS
image
(NativeImage | string)
在 macOS 中,设置image
作为托盘图标被按下时显示的图标