系统托盘
系统托盘
https://v2.tauri.org.cn/learn/system-tray/
Tauri 允许你为应用程序创建和自定义系统托盘。这可以通过提供对常用操作的快速访问来增强用户体验。
配置
首先,更新你的 Cargo.toml
以包含系统托盘所需的特性。
src-tauri/Cargo.toml
tauri = { version = "2.0.0", features = [ "tray-icon" ] }
用法
托盘 API 可在 JavaScript 和 Rust 中使用。
创建一个托盘图标
JavaScript
使用 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
。
Rust
use tauri::tray::TrayIconBuilder;
tauri::Builder::default()
.setup(|app| {
let tray = TrayIconBuilder::new().build(app)?;
Ok(())
})
有关自定义选项的更多信息,请参阅 TrayIconBuilder
。
更改托盘图标
创建托盘时,你可以使用应用程序图标作为托盘图标
JavaScript
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);
Rust
let tray = TrayIconBuilder::new()
.icon(app.default_window_icon().unwrap().clone())
.build(app)?;
添加菜单
要附加在单击托盘时显示的菜单,可以使用 menu
选项。
Tip
注意
默认情况下,菜单在左右单击时都会显示。
要防止菜单在左键单击时弹出,请调用 menu_on_left_click(false)
Rust 函数或将 menuOnLeftClick
JavaScript 选项设置为 false
。
JavaScript
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);
Rust
use tauri::{
menu::{Menu, MenuItem},
tray::TrayIconBuilder,
};
let quit_i = MenuItem::with_id(app, "quit", "Quit", true, None::<&str>)?;
let menu = Menu::with_items(app, &[&quit_i])?;
let tray = TrayIconBuilder::new()
.menu(&menu)
.menu_on_left_click(true)
.build(app)?;
监听菜单事件
JavaScript
在 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: 当光标收到单次左键、右键或中键单击时触发,包括鼠标是否松开的信息
- 双击: 当光标收到双击左键、右键或中键时触发
- Enter: 当光标进入托盘图标区域时触发
- Move: 当光标在托盘图标区域内移动时触发
- Leave: 当光标离开托盘图标区域时触发
JavaScript
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);
Rust
use tauri::{
Manager,
tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent}
};
TrayIconBuilder::new()
.on_tray_icon_event(|tray, event| match event {
TrayIconEvent::Click {
button: MouseButton::Left,
button_state: MouseButtonState::Up,
..
} => {
println!("left click pressed and released");
// in this example, let's show and focus the main window when the tray is clicked
let app = tray.app_handle();
if let Some(window) = app.get_webview_window("main") {
let _ = window.unminimize();
let _ = window.show();
let _ = window.set_focus();
}
}
_ => {
println!("unhandled event {event:?}");
}
})
有关事件负载的更多信息,请参阅 TrayIconEvent
。
有关创建菜单的详细信息,包括菜单项、子菜单和动态更新,请参阅 窗口菜单 文档。
链接到当前文件 0
没有文件链接到当前文件