跳至主要內容

視窗選單

原生應用程式選單可以附加至視窗。

建立選單

若要建立原生視窗選單,請匯入 MenuSubmenuMenuItemCustomMenuItem 類型。MenuItem 列舉包含一系列特定於平台的項目(目前未在 Windows 上實作)。CustomMenuItem 允許您建立自己的選單項目,並為它們新增特殊功能。

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

建立一個 Menu 實例

// here `"quit".to_string()` defines the menu item id, and the second parameter is the menu item label.
let quit = CustomMenuItem::new("quit".to_string(), "Quit");
let close = CustomMenuItem::new("close".to_string(), "Close");
let submenu = Submenu::new("File", Menu::new().add_item(quit).add_item(close));
let menu = Menu::new()
.add_native_item(MenuItem::Copy)
.add_item(CustomMenuItem::new("hide", "Hide"))
.add_submenu(submenu);

將選單加入所有視窗

已定義的選單可以使用 tauri::Builder 結構上的 menu API 設定至所有視窗

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

fn main() {
let menu = Menu::new(); // configure the menu
tauri::Builder::default()
.menu(menu)
.run(tauri::generate_context!())
.expect("error while running tauri application");
}

將選單加入特定視窗

您可以建立一個視窗並設定要使用的選單。這允許為每個應用程式視窗定義特定的選單組。

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

fn main() {
let menu = Menu::new(); // configure the menu
tauri::Builder::default()
.setup(|app| {
WindowBuilder::new(
app,
"main-window".to_string(),
tauri::WindowUrl::App("index.html".into()),
)
.menu(menu)
.build()?;
Ok(())
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
}

監聽自訂選單項目的事件

每個 CustomMenuItem 在按一下時會觸發一個事件。使用 on_menu_event API 來處理這些事件,無論是在全域 tauri::Builder 或特定視窗上。

監聽全域選單的事件

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

fn main() {
let menu = Menu::new(); // configure the menu
tauri::Builder::default()
.menu(menu)
.on_menu_event(|event| {
match event.menu_item_id() {
"quit" => {
std::process::exit(0);
}
"close" => {
event.window().close().unwrap();
}
_ => {}
}
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
}

監聽視窗選單的事件

use tauri::{CustomMenuItem, Menu, MenuItem};
use tauri::{Manager, WindowBuilder};

fn main() {
let menu = Menu::new(); // configure the menu
tauri::Builder::default()
.setup(|app| {
let window = WindowBuilder::new(
app,
"main-window".to_string(),
tauri::WindowUrl::App("index.html".into()),
)
.menu(menu)
.build()?;
let window_ = window.clone();
window.on_menu_event(move |event| {
match event.menu_item_id() {
"quit" => {
std::process::exit(0);
}
"close" => {
window_.close().unwrap();
}
_ => {}
}
});
Ok(())
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
}

更新選單項目

Window 結構有一個 menu_handle 方法,允許更新選單項目

fn main() {
let menu = Menu::new(); // configure the menu
tauri::Builder::default()
.menu(menu)
.setup(|app| {
let main_window = app.get_window("main").unwrap();
let menu_handle = main_window.menu_handle();
std::thread::spawn(move || {
// you can also `set_selected`, `set_enabled` and `set_native_image` (macOS only).
menu_handle.get_item("item_id").set_title("New title");
});
Ok(())
})
}