You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Tauri中通过窗口菜单创建新窗口?遇create_window方法不可用

解决Tauri菜单事件中无法调用create_window创建新窗口的问题

你遇到的问题是因为event.window().clone()获取的是已存在的窗口实例,这个对象并没有提供创建新窗口的方法。要创建新窗口,你需要通过Tauri的AppHandle(应用句柄)来操作,结合WindowBuilder实现和主窗口相同配置的新窗口。

修复步骤:

  1. 获取应用句柄:从菜单事件的窗口对象中获取AppHandle,它是创建新窗口的核心入口。
  2. 复用主窗口配置:读取主窗口的URL、标题等配置,用WindowBuilder复刻一个相同的窗口。
  3. 构建并显示新窗口:调用WindowBuilder的build方法完成窗口创建。

修改后的完整代码:

#![cfg_attr(
all(not(debug_assertions), target_os = "windows"),
windows_subsystem = "windows"
)]

use tauri::{Menu, WindowMenuEvent, Wry, Submenu, CustomMenuItem, WindowUrl, WindowBuilder};


pub fn create() -> Menu {
    let test_menu = Menu::new()
        .add_item(CustomMenuItem::new("new_window", "Create new window"));

    Menu::new()
        .add_submenu(Submenu::new("Test", test_menu))

}


pub fn handler(event: WindowMenuEvent<Wry>) {
    match event.menu_item_id() {
        "new_window" => {
            // 获取主窗口实例
            let main_window = event.window();
            // 获取应用句柄
            let app_handle = main_window.app_handle();
            
            // 复刻主窗口的URL
            let window_url = main_window.url().clone();
            
            // 构建并创建新窗口,复用主窗口的标题和URL
            WindowBuilder::new(&app_handle, "new_window_instance".to_string(), window_url)
                .title(main_window.title())
                .build()
                .expect("Failed to create new window");
        }
        _ => {}
    }
}


fn main() {
    tauri::Builder::default()
        .menu(create())
        .on_menu_event(handler)
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

关键说明:

  • main_window.app_handle():获取应用全局句柄,所有窗口的创建都依赖它。
  • WindowBuilder::new:第一个参数是AppHandle,第二个是窗口的唯一标识符(需保证不重复,可自定义),第三个是窗口加载的URL,这里直接复用主窗口的URL实现相同窗口效果。
  • 如果需要完全复刻主窗口的大小、位置等配置,可以额外调用.size()、.position()等方法,从主窗口的inner_size()、outer_position()获取对应值。

内容的提问来源于stack exchange,提问作者Snoz3f

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:16:24