菜单

窗口管理

相关源文件

本页介绍了 Tauri 的窗口管理系统,该系统负责跨不同平台创建、控制和管理应用程序窗口。有关 Webview 管理的信息,请参阅 Webview Management,有关应用程序内的状态管理,请参阅 状态管理

概述

Tauri 的窗口管理系统为应用程序窗口的控制提供了跨平台抽象。该系统允许应用程序创建、修改和监视窗口,在 Windows、macOS、Linux 和移动平台上提供一致的行为。

关键组件

来源

窗口管理器架构

WindowManager<R> 是一个核心组件,用于跟踪和管理 Tauri 应用程序中的所有窗口。它负责

  1. 维护所有窗口的引用
  2. 处理窗口创建/准备
  3. 管理窗口事件侦听器
  4. 设置默认窗口图标

来源

窗口创建流程

  1. 应用程序使用 WindowBuilder 创建窗口规范
  2. WindowManager 准备窗口,检查重复标签并设置默认图标
  3. 运行时创建特定于平台的窗口实现
  4. WindowManager 附加窗口,设置事件处理程序
  5. 窗口被添加到管理器的内部注册表中

来源

窗口事件

窗口会发出各种事件,应用程序可以侦听和响应这些事件。这些事件提供了有关用户交互和窗口状态更改的信息。

事件类型描述负载
已调整大小窗口大小已更改PhysicalSize<u32>
已移动窗口位置已更改PhysicalPosition<i32>
CloseRequested用户尝试关闭窗口CloseRequestApi
已销毁窗口已被销毁None
聚焦窗口获得/失去焦点bool
ScaleFactorChanged显示比例因子已更改{ scale_factor, new_inner_size }
DragDrop文件拖放事件DragDropEvent
ThemeChanged系统主题已更改主题

可以在多个级别上侦听事件

  • App 中的全局窗口事件
  • 附加到特定窗口的每个窗口事件
  • Webview 中的 JavaScript 事件侦听器

来源

事件侦听器注册

Tauri 提供了多种侦听窗口事件的方法

来源

窗口创建和配置

可以使用各种配置选项创建窗口,这些选项定义了它们的外观和行为。Tauri 提供了 WebviewWindowBuilder 来创建带有 Webview 的窗口。

窗口创建示例

来源

窗口属性

窗口可以通过各种属性进行自定义

属性描述默认
标题窗口标题空字符串
内部尺寸内容区域大小800x600
最小内部尺寸最小内容尺寸None
最大内部尺寸最大内容尺寸None
位置窗口位置居中
可调整大小窗口是否可调整大小true
全屏窗口是否全屏false
装饰窗口是否带有标题栏和边框true
透明窗口是否具有透明背景false
always_on_top窗口是否保持在其他窗口之上false
可见创建后窗口是否可见true

来源

窗口操作

Tauri 提供了丰富的 API 来在运行时操作窗口

来源

窗口控制示例

来源

窗口和 Webview 的关系

在 Tauri 中,窗口和 Webview 之间有着密切的关系。WebviewWindow 是一个特殊的窗口,它包含一个 Webview,结合了窗口管理和 Web 内容渲染。

来源

窗口查找和检索

Tauri 提供通过标签查找和检索窗口的方法

来源

平台特定考量

Windows

  • 使用 tao crate(winit 的一个分支)进行窗口创建
  • 窗口可以指定自定义 .ico 文件作为窗口图标

macOS

  • macOS 菜单和激活策略的特殊注意事项
  • 窗口可以指定自定义 .icns 文件作为窗口图标
  • 通过 TitleBarStyle 可用的特殊标题栏样式

Linux

  • 通过 tao 支持 X11/Wayland
  • GTK 样式和行为

移动端 (iOS/Android)

  • 有限的窗口管理功能
  • 通常采用单一全屏窗口的方式

来源

窗口最佳实践

  1. 使用唯一的窗口标签 - 确保每个窗口都有一个唯一的标签以避免冲突
  2. 处理窗口关闭事件 - 在需要时拦截关闭事件,但不要不必要地阻止它们
  3. 管理窗口生命周期 - 在不再需要窗口时关闭它们以释放资源
  4. 考虑平台差异 - 在设计中考虑特定于平台的窗口行为
  5. 使用合适的窗口大小 - 为您的内容设置合理的最小/最大尺寸
  6. 在所有目标平台上进行测试 - 窗口行为在不同平台上的差异可能很大

来源