3 个版本

0.1.2 2023 年 10 月 6 日
0.1.1 2023 年 10 月 6 日
0.1.0 2023 年 10 月 6 日

#681 in GUI

MIT 许可证

165KB
4K SLoC

img

version Documentation dependency status

Rusty 文件对话框是一个跨平台的 Rust 库,用于使用本机文件打开/保存对话框。它提供了异步和同步 API。支持的平台

  • Windows
  • macOS
  • Linux & BSDs (GTK3 或 XDG 桌面门户)
  • WASM32 (仅异步)

有关更多详细信息,请参阅文档

特定平台的说明

Linux

请参阅 Linux & BSD 后端 了解 Linux 编译所需依赖项的信息。


lib.rs:

Rusty 文件对话框是一个用于使用本机文件打开/保存对话框的跨平台库。它提供了异步和同步 API。支持的平台

  • Windows
  • macOS
  • Linux & BSDs (GTK3 或 XDG 桌面门户)
  • WASM32 (仅异步)

示例

同步

use rfd::FileDialog;

let files = FileDialog::new()
    .add_filter("text", &["txt", "rs"])
    .add_filter("rust", &["rs", "toml"])
    .set_directory("/")
    .pick_file();

异步

use rfd::AsyncFileDialog;

let future = async {
    let file = AsyncFileDialog::new()
        .add_filter("text", &["txt", "rs"])
        .add_filter("rust", &["rs", "toml"])
        .set_directory("/")
        .pick_file()
        .await;

    let data = file.unwrap().read().await;
};

Linux & BSD 后端

在 Linux & BSD 上,有两个后端可供选择,一个使用 GTK3 Rust 绑定,另一个使用通过 ashpd & zbusXDG 桌面门户 D-Bus API。

GTK 后端

GTK 后端与默认启用的 gtk3 Cargo 功能一起使用。GTK3 后端需要安装 C 库和开发头文件才能构建 RFD。各个发行版的软件包名称如下

发行版 安装命令
Fedora dnf install gtk3-devel
Arch pacman -S gtk3
Debian & Ubuntu apt install libgtk-3-dev

XDG 桌面门户后端

当禁用 gtk3 功能并启用 xdg-portal 时,将使用 XDG 桌面门户后端。这可以通过在 default-features = false 中禁用 gtk3 来实现,并启用 xdg-portal。该后端将根据运行时使用的桌面环境使用 GTK 或 KDE 文件对话框。它没有任何非 Rust 构建依赖项,但要求用户在运行时安装 GTK、GNOME 或 KDE XDG 桌面门户后端之一。这些通常与桌面环境一起由发行版安装。如果您正在打包使用 RFD 的应用程序,请确保在包中安装了其中之一。wlroots 门户后端 没有实现 RFD 所需的 D-Bus API(它不会干扰其他门户实现;它们可以同时安装)。

XDG 桌面门户没有消息对话框的 API,因此使用 [MessageDialog] 和 [AsyncMessageDialog] 结构体无法与该后端一起构建。

macOS 非窗口应用程序、异步和多线程

macOS 异步对话框需要一个 NSApplication 实例,因此当在类似 winitSDL2 的窗口环境中打开时,对话框才是真正的异步。否则,它将回退到同步对话框。还建议在主线程上创建对话框。RFD 可以从任何线程运行对话框,但仅适用于窗口应用程序,并且会增加一些开销。因此建议 在主线程上启动并等待其他线程。非窗口应用程序永远无法从主线程以外的线程启动异步对话框。

在 Windows 中自定义消息对话框的按钮文本

使用 TaskDialogIndirect API 来显示可以自定义按钮文本的消息对话框。它仅由 ComCtl32.dll v6 提供,但 Windows 默认使用 v5。如果您想自定义按钮文本或只需要现代对话框样式(即 视觉样式),则需要

  1. 启用 cargo 功能 common-controls-v6
  2. 添加应用程序清单以使用 ComCtl32.dll v5。请参阅 Windows Controls / Enabling Visual Styles

这是一个使用 embed-resource 的示例。

Cargo 功能

  • gtk3:在 Linux 和 BSD 上使用 GTK 进行对话框;对 Windows 和 macOS 无影响
  • xdg-portal:在 Linux 和 BSD 上使用 XDG 桌面门户而不是 GTK
  • common-controls-v6:使用 ComCtl32.dll v6 的 TaskDialogIndirect API 来显示消息对话框。如果您需要自定义对话框按钮文本,则需要此功能。

状态

API 稳定性
🚧
功能 Linux Windows MacOS Wasm32
SingleFile
MultipleFile
PickFolder
SaveFile
Filters ✔ (GTK only)
StartingPath
Async

rfd-extras

AKA 功能,这些功能与文件无关

功能 Linux Windows MacOS Wasm32
MessageDialog ✔ (GTK only)
PromptDialog
ColorPicker

依赖关系

~0.1–18MB
~207K SLoC