跳到内容
Tauri

系统托盘

Tauri 允许您为应用程序创建和自定义系统托盘。这可以通过提供对常用操作的快速访问来增强用户体验。

首先,更新您的 Cargo.toml 以包含系统托盘所需的特性(feature)。

src-tauri/Cargo.toml
tauri = { version = "2.0.0", features = [ "tray-icon" ] }

托盘 API 可在 JavaScript 和 Rust 中使用。

使用 TrayIcon.new 静态函数来创建一个新的托盘图标

import { TrayIcon } from '@tauri-apps/api/tray';
const options = {
// here you can add a tray menu, title, tooltip, event handler, etc
};
const tray = await TrayIcon.new(options);

有关自定义选项的更多信息,请参阅 TrayIconOptions

在创建托盘时,您可以使用应用程序图标作为托盘图标

import { TrayIcon } from '@tauri-apps/api/tray';
import { defaultWindowIcon } from '@tauri-apps/api/app';
const options = {
icon: await defaultWindowIcon(),
};
const tray = await TrayIcon.new(options);

要附加一个在点击托盘时显示的菜单,可以使用 menu 选项。

import { TrayIcon } from '@tauri-apps/api/tray';
import { Menu } from '@tauri-apps/api/menu';
const menu = await Menu.new({
items: [
{
id: 'quit',
text: 'Quit',
},
],
});
const options = {
menu,
menuOnLeftClick: true,
};
const tray = await TrayIcon.new(options);

在 JavaScript 中,您可以直接将菜单点击事件监听器附加到菜单项上。

  • 使用共享菜单点击处理程序

    import { Menu } from '@tauri-apps/api/menu';
    function onTrayMenuClick(itemId) {
    // itemId === 'quit'
    }
    const menu = await Menu.new({
    items: [
    {
    id: 'quit',
    text: 'Quit',
    action: onTrayMenuClick,
    },
    ],
    });
  • 使用专用的菜单点击处理程序

    import { Menu } from '@tauri-apps/api/menu';
    const menu = await Menu.new({
    items: [
    {
    id: 'quit',
    text: 'Quit',
    action: () => {
    console.log('quit pressed');
    },
    },
    ],
    });

托盘图标会针对以下鼠标事件发出通知:

  • Click(点击):当光标接收到单次左键、右键或中键点击时触发,包含有关是否释放了鼠标按键的信息。
  • Double click(双击):当光标接收到双次左键、右键或中键点击时触发。
  • Enter(进入):当光标进入托盘图标区域时触发。
  • Move(移动):当光标在托盘图标区域内移动时触发。
  • Leave(离开):当光标离开托盘图标区域时触发。
import { TrayIcon } from '@tauri-apps/api/tray';
const options = {
action: (event) => {
switch (event.type) {
case 'Click':
console.log(
`mouse ${event.button} button pressed, state: ${event.buttonState}`
);
break;
case 'DoubleClick':
console.log(`mouse ${event.button} button pressed`);
break;
case 'Enter':
console.log(
`mouse hovered tray at ${event.rect.position.x}, ${event.rect.position.y}`
);
break;
case 'Move':
console.log(
`mouse moved on tray at ${event.rect.position.x}, ${event.rect.position.y}`
);
break;
case 'Leave':
console.log(
`mouse left tray at ${event.rect.position.x}, ${event.rect.position.y}`
);
break;
}
},
};
const tray = await TrayIcon.new(options);

有关事件负载(payload)的更多信息,请参阅 TrayIconEvent

有关创建菜单的详细信息(包括菜单项、子菜单和动态更新),请参阅 窗口菜单 (Window Menu) 文档。


© 2026 Tauri 贡献者。CC-BY / MIT