tauri版本2的系统托盘

Tauri 2.0.0-rc 系统托盘实现指南

在 Tauri 2.0.0-rc 版本中,你有两种主要方式来实现系统托盘功能。以下是这两种方式的详细说明和代码示例。

方式一:通过 tauri.conf.json 配置

tauri.conf.json 文件中,你可以直接配置系统托盘的属性,如图标路径、标题和提示信息。

  • 第一中是
json 复制代码
 {
  "tauri": {
    "app": {
      "windows": [
        {
          "title": "time",
          "width": 800,
          "height": 600
        }
      ],
      "security": {
        "csp": null
      },
      "trayIcon": {
        "iconPath": "icons/icon.ico",
        "iconAsTemplate": true,
        "title": "时间管理器",
        "tooltip": "时间管理器"
      }
    }
  }
}

这种方式简单直接,适用于不需要复杂交互的托盘图标。

方式二:通过 Rust 代码创建

如果你需要更复杂的交互,比如点击托盘图标显示菜单或执行特定操作,你可以通过 Rust 代码来创建系统托盘。

1. 创建托盘菜单

首先,你需要定义托盘菜单项和子菜单。

tray.rs

rs 复制代码
use tauri::{
    menu::{Menu, MenuItem, Submenu},
    tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent},
    Manager,
    Runtime,
};

pub fn create_tray<R: Runtime>(app: &tauri::AppHandle<R>) -> tauri::Result<()> {
    let quit_i = MenuItem::with_id(app, "quit", "突出", true, None::<&str>)?;
    let show_i = MenuItem::with_id(app, "show", "显示", true, None::<&str>)?;
    let hide_i = MenuItem::with_id(app, "hide", "隐藏", true, None::<&str>)?;
    let edit_i = MenuItem::with_id(app, "edit_file", "编辑", true, None::<&str>)?;
    let new_i = MenuItem::with_id(app, "new_file", "添加", true, None::<&str>)?;
    let a =Submenu::with_id_and_items(app, "File", "文章", true, &[&new_i, &edit_i])?;
    // 分割线
    let menu = Menu::with_items(app, &[&quit_i, &show_i, &hide_i, &a])?;

    let _ = TrayIconBuilder::with_id("tray")
        .icon(app.default_window_icon().unwrap().clone())
        .menu(&menu)
        .menu_on_left_click(false)
        .on_menu_event(move |app, event| match event.id.as_ref() {
            "quit" => {
                app.exit(0);
            },
            "show" => {
                let window = app.get_webview_window("main").unwrap();
                let _ = window.show();
            },
            "hide" => {
                let window = app.get_webview_window("main").unwrap();
                let _ = window.hide();
            },
            "edit_file" => {
                println!("edit_file");
            },
            "new_file" => {
                println!("new_file");
            },
            // Add more events here
            _ => {}
        })
        .on_tray_icon_event(|tray, event| {
            if let TrayIconEvent::Click {
                button: MouseButton::Left,
                button_state: MouseButtonState::Up,
                ..
            } = event
            {
                let app = tray.app_handle();
                if let Some(window) = app.get_webview_window("main") {
                    let _ = window.show();
                    let _ = window.set_focus();
                }
            }
        })
        .build(app);

    Ok(())
}

2. 注册托盘创建函数

在你的主函数中,你需要注册 create_tray 函数,以便在应用启动时创建系统托盘

lib.rs

rs 复制代码
#[cfg(desktop)]
mod tray;
pub fn run() {
    tauri::Builder::default()
    // ...
    .setup(|app| {
    #[cfg(all(desktop))]
    {
    let handle = app.handle();
    tray::create_tray(handle)?;
    }
    Ok(())
    })
    // ...
    .run(tauri::generate_context!())
    .expect("error while running tauri application");
}

总结

通过上述两种方式,你可以在 Tauri 2.0.0-rc 应用程序中实现系统托盘功能。第一种方式适用于简单的托盘图标显示,而第二种方式提供了更多的自定义和交互可能性。根据你的应用需求选择合适的实现方

  • 参考资料https://v2.tauri.app/zh-cn/plugin/system-tray/#creating-the-system-tray-in-rust
相关推荐
带娃的IT创业者7 小时前
重新定义前端构建速度:深度解析 SWC 如何用 Rust 颠覆 JavaScript 工具链
前端·javascript·rust·前端构建·swc
Yeauty11 小时前
用 Whisper 转录前,你不用再离开 Rust
开发语言·rust·ffmpeg·音视频·视频
程序员爱钓鱼11 小时前
Rust HashMap 详解:键值存储、查询、更新与统计
后端·面试·rust
doiito1 天前
【AI 应用】从“外国人味”到地道中文:kokoroi-rs v0.1.2 架构升级深度解析
ai·rust·系统设计
Zwarwolf1 天前
Rust零散知识点项目汇总
开发语言·rust
X档案库1 天前
【开源】我做了一套可以 AI 托管的 Markdown 博客与知识库
rust·博客·markdown·marksharex
程序员爱钓鱼1 天前
Rust Vec 动态数组详解:创建、增删、遍历与排序
前端·后端·rust
_abab1 天前
Rust重塑系统编程:从Linux内核到AI推理引擎的2026全景解析
linux·人工智能·rust
doiito2 天前
【Agent Harness】Gliding Horse 高级认知优化:让 Agent 的“大脑”和“免疫系统”真正协同
ai·rust·架构设计·系统设计·ai agent
longxiangam2 天前
第 4 篇:Embassy 异步运行时与事件驱动架构
单片机·嵌入式硬件·rust