字玩FontPlayer开发笔记6 Tauri2设置菜单
字玩FontPlayer是笔者开源的一款字体设计工具,使用Vue3 + ElementUI开发,源代码:
github: https://github.com/HiToysMaker/fontplayer
gitee: https://gitee.com/toysmaker/fontplayer
笔记
字玩目前是用Electron进行桌面端应用打包,但是性能体验不太好,一直想替换成Tauri。Tauri的功能和Electron类似,都可以把前端代码打包生成桌面端(比如Windows和Mac)应用。Tauri只使用系统提供的WebView,不像Electron一样内置Chromium和Node.js,性能体验更佳。
继昨天初步尝试Tauri后,今天学习了下Tauri的原生菜单设置,网上Tauri1的教程比较多,查了半天最后还是看官方文档的升级教程解决了问题。
官方教程升级链接:[https://v2.tauri.app/start/migrate/from-tauri-1/]https://v2.tauri.app/start/migrate/from-tauri-1/
- 添加菜单
src-tauri/lib.rs
use tauri::menu::{Menu, MenuItem, PredefinedMenuItem, Submenu, MenuItemBuilder};
pub fn run() {
tauri::Builder::default()
.setup(|app| {
//...
})
.menu(|handle| Menu::with_items(handle, &[
&Submenu::with_items(
handle,
"File",
true,
&[
&MenuItemBuilder::with_id("about", "关于").build(handle).expect("Error")
],
)?,
&Submenu::with_items(
handle,
"Test",
true,
&[
&MenuItemBuilder::with_id("create-file", "新建").accelerator("Ctrl+Shift+T").build(handle).expect("Error")
],
)?,
]))
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
- 菜单事件处理
src-tauri/lib.rs
use tauri::{AppHandle, Emitter};
#[tauri::command]
fn test(app: AppHandle) {
app.emit("create-file", ()).unwrap();
}
pub fn run() {
tauri::Builder::default()
.setup(|app| {
//...
app.on_menu_event(move |app, event| {
if event.id() == "about" {
println!("about");
} else if event.id() == "create-file" {
test(app.app_handle().clone())
}
});
//...
})
.menu(
//...
)
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
注意到以上代码中定义了新建按钮的点击事件:
fn test(app: AppHandle) {
app.emit("create-file", ()).unwrap();
}
这个事件中,app.emit方法将给前端发起消息,前端监听消息后进行逻辑处理。
- 前端监听代码
const initTauri = () => {
listen('create-file', (event) => {
handlers['create-file']()
});
}
- 最终效果: