Tauri 进阶使用与实践指南

news/2024/9/17 15:54:34

Tauri 进阶使用与实践指南

调试技术

在 Tauri 应用开发中,调试分为两大部分:Web 端与 Rust 控制台。

Web 端调试

在 Web 端界面,可以直接采用浏览器内置的开发者工具进行调试。在 Windows 上,可以通过快捷键 Ctrl + Shift + i 打开调试器;而在 macOS 上,则是通过 Command + Option + i 快捷键启动。

Rust 控制台调试

Rust 代码中的调试主要依靠 println! 宏来进行输出,例如:

println!("Message from Rust: {}", msg);

当遇到 Tauri 应用崩溃时,开启 Rust 调试堆栈跟踪有助于定位问题。在 Linux 和 macOS 上,执行如下命令启用堆栈跟踪:

RUST_BACKTRACE=1 tauri dev

而对于 Windows 用户,应在命令行中先设置环境变量再运行 Tauri:

set RUST_BACKTRACE=1
tauri dev

Tauri 与 Web 端的通信机制

Rust 端

/src-tauri/src/main.rs 文件中定义 Rust 端逻辑。通过 #[tauri::command] 注解声明一个可被 Web 端调用的函数:

// 创建一个名为 my_custom_command 的方法,接受字符串参数并返回一个字符串
#[tauri::command]
fn my_custom_command(_str: String) -> String {
    let _res_str = format!("接受参数为: {}", _str);
    _res_str
}

fn main() {
    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![greet, my_custom_command]) // 多个命令以逗号分隔
        .run(tauri::generate_context!())
        .expect("运行 Tauri 应用时出错");
}
Web 端

在前端 JavaScript 或 TypeScript 中,通过 @tauri-apps/api 导入 invoke 函数以调用 Rust 端定义的命令:

import { invoke } from "@tauri-apps/api/tauri";

const clickEvent = async () => {
  let str = 'web字符串';
  let res = await invoke("my_custom_command", { str });
  console.log(res, "===str===");
};

窗口菜单定制

创建和添加菜单

/src-tauri/src/main.rs 中,Tauri 提供了丰富的 API 来创建和管理本机窗口菜单。

首先导入所需类型:

use tauri::{CustomMenuItem, Menu, MenuItem, Submenu};

接下来实例化菜单项和子菜单:

let quit = CustomMenuItem::new("caidan11".to_string(), "菜单1-1");
let close = CustomMenuItem::new("caidan12".to_string(), "菜单1-2");
let submenu = Submenu::new("菜单1", Menu::new().add_item(quit).add_item(close));

let menu = Menu::new()
    .add_native_item(MenuItem::Copy) // 添加本机菜单项(如复制)
    .add_item(CustomMenuItem::new("caidan2", "菜单2")) // 添加自定义菜单项
    .add_submenu(submenu); // 添加带有子菜单的条目

然后,在 main 函数中将菜单添加至全局,并监听菜单点击事件:

fn main() {
    // ... 菜单项初始化 ...

    tauri::Builder::default()
        .menu(menu) // 将菜单添加至所有窗口
        .on_menu_event(|event| {
            match event.menu_item_id() {
                "caidan2" => println!("event caidan2"),
                "caidan11" => println!("event caidan11"),
                "caidan12" => println!("event caidan12"),
                _ => {}
            }
        })
        // ... 其他配置 ...
}
Tauri 2.0 展望

随着 Tauri 框架的持续演进,未来的 Tauri 2.0 版本预计将带来更多强大的功能和更完善的开发者体验。通过上述进阶示例,我们已经展示了如何进行跨语言通信、调试和自定义窗口菜单。期待 Tauri 2.0 在保持轻量化的同时,进一步提高性能,增加跨平台一致性,并强化与现代 Web 技术的融合,为桌面应用开发带来更多的可能性和便利性。


http://lihuaxi.xjx100.cn/news/2142344.html

相关文章

LabVIEW专栏二、调用子VI

该节目标是创建带子vi,修改vi属性,测试可重入和不可重入的区别 一 、设置子VI 把VI封装成为子VI,可以帮助模块化程序,简化代码结构。 任何VI本身都可以成为别的VI的子VI。 1.1、设置输入输出端子 1、在前面板空白处&#xff0…

Vue3:使用Pinia存储、读取、修改数据

一、存储数据 Pinia插件中,存储数据的配置项是state count.ts import {defineStore} from piniaexport const useCountStore defineStore(count,{// 真正存储数据的地方state(){return {sum:6}} })loveTalk.ts import {defineStore} from piniaexport const use…

WebKit结构简介

WebKit是一款开源的浏览器引擎,用于渲染网页内容。它负责将HTML、CSS和JavaScript等网络资源转换为用户在屏幕上看到的图形界面。WebKit是一个跨平台的引擎,可以在多种操作系统上运行,如Windows、macOS、Linux等。 以下是一篇关于WebKit结构…

Mini-React

jsx jsx 是React中对于JavaScript的语法扩展,允许在JavaScript中去写类似于HTML的代码。使得开发者能够以一种更直观和声明式的方式去编写用户界面 vdom vdom是React为了提高性能而去引入的一个虚拟的dom表示。 它是一个轻量级的 JavaScript 对象,用于…

软考高级架构师:系统性能设计-阿姆达尔定律概念和例题

一、AI 讲解 系统性能设计中的一个重要概念是阿姆达尔定律(Amdahl’s Law)。阿姆达尔定律是由吉恩阿姆达尔(Gene Amdahl)在1967年提出的,用于评估系统性能提升的理论上限,特别是在考虑并行计算时。该定律表…

MySQL两表联查之分组成绩第几问题

MySQL 数据库操作实践:两表联查之分组成绩第几问题 在本篇博客中,我将展示MySQL 从创建表、到插入数据,并进行一些复杂的查询操作。 1. 建立表格 首先,我们创建两个表:department(部门)和 em…

Vue3:重构Pinia的store,使用组合式写法实现

一、情景说明 之前的count.ts和loveTalk.ts都是选项式写法 这里,重构成Vue3官方建议的组合式写法(Composition) 二、案例 以loveTalk.ts为例 1、选项式(Options)写法 import {defineStore} from pinia import axios from axios import {nanoid} from nanoidexpo…

朗之万方程,机器学习与液体中的粒子运动

目录 一、说明二、朗之万方程的诞生2.1 牛顿力学2.2 流体中的随机运动 三、小质量物体布朗运动方程四、布朗运动的Python代码五、稳定性讨论5.1 波尔兹曼分布5.2 梯度下降算法 六、随机梯度下降(SGD)和小批量梯度下降七、机器学习与物理,作为…