43 个版本 (14 个重大更改)
0.15.1 | 2024 年 8 月 16 日 |
---|---|
0.14.3 | 2024 年 6 月 4 日 |
0.13.0 | 2024 年 3 月 27 日 |
0.11.1 | 2023 年 12 月 13 日 |
0.2.0 | 2022 年 12 月 30 日 |
#39 在 GUI
63,086 每月下载量
在 6 crates 中使用
87KB
2K SLoC
tray-icon 允许您为桌面应用程序创建托盘图标。
支持的平台
- Windows
- macOS
- Linux (仅限 gtk)
平台特定说明
- 在 Windows 和 Linux 上,必须在线程上运行事件循环,在 Windows 上为 win32 事件循环,在 Linux 上为 gtk 事件循环。这不一定是主线程,但您必须在与事件循环相同的线程上创建托盘图标。
- 在 macOS 上,必须在主线程上运行事件循环,因此您还必须在主线程上创建托盘图标。
Cargo 功能
common-controls-v6
: 在 Windows 上使用来自ComCtl32.dll
的 v6TaskDialogIndirect
API 显示预定义的About
菜单项对话框。libxdo
: 启用链接到libxdo
,该库用于预定义的Copy
、Cut
、Paste
和SelectAll
菜单项,请参阅 https://github.com/tauri-apps/muda#cargo-featuresserde
: 启用 de/serializing derive。
依赖项(仅限 Linux)
在 Linux 上,使用 gtk
和 libxdo
使预定义的 Copy
、Cut
、Paste
和 SelectAll
菜单项正常工作,并使用 libappindicator
或 libayatnat-appindicator
创建托盘图标,因此请确保在您的系统上安装它们。
Arch Linux / Manjaro
pacman -S gtk3 xdotool libappindicator-gtk3 #or libayatana-appindicator
Debian / Ubuntu
sudo apt install libgtk-3-dev libxdo-dev libappindicator3-dev #or libayatana-appindicator3-dev
示例
创建不带菜单的托盘图标。
use tray_icon::TrayIconBuilder;
let tray_icon = TrayIconBuilder::new()
.with_tooltip("system-tray - tray icon library!")
.with_icon(icon)
.build()
.unwrap();
创建带有菜单的托盘图标。
use tray_icon::{TrayIconBuilder, menu::Menu};
let tray_menu = Menu::new();
let tray_icon = TrayIconBuilder::new()
.with_menu(Box::new(tray_menu))
.with_tooltip("system-tray - tray icon library!")
.with_icon(icon)
.build()
.unwrap();
处理托盘事件
您可以使用 TrayIconEvent::receiver
获取 TrayIconEventReceiver
的引用,您可以使用它来监听托盘图标上点击时的事件
use tray_icon::TrayIconEvent;
if let Ok(event) = TrayIconEvent::receiver().try_recv() {
println!("{:?}", event);
}
您还可以使用 MenuEvent::receiver
监听菜单事件,以获取托盘上下文菜单的事件。
use tray_icon::{TrayIconEvent, menu::{MenuEvent}};
if let Ok(event) = TrayIconEvent::receiver().try_recv() {
println!("tray event: {:?}", event);
}
if let Ok(event) = MenuEvent::receiver().try_recv() {
println!("menu event: {:?}", event);
}
许可证
Apache-2.0/MIT
依赖项
~1–16MB
~213K SLoC