41 个版本

0.14.1 2024年3月19日
0.13.0 2024年1月14日
0.12.1 2023年10月20日
0.11.4 2023年5月19日
0.0.1 2020年11月27日

#18GUI

Download history 40343/week @ 2024-04-27 38417/week @ 2024-05-04 43377/week @ 2024-05-11 42276/week @ 2024-05-18 44032/week @ 2024-05-25 45210/week @ 2024-06-01 38663/week @ 2024-06-08 43425/week @ 2024-06-15 43519/week @ 2024-06-22 46670/week @ 2024-06-29 51425/week @ 2024-07-06 52674/week @ 2024-07-13 56095/week @ 2024-07-20 54794/week @ 2024-07-27 56907/week @ 2024-08-03 50571/week @ 2024-08-10

226,210 每月下载量
用于 193 个 crate (117 直接)

MIT 许可证

170KB
4K SLoC

img

version Documentation dependency status

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

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

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

特定平台说明

Linux

有关在 Linux 上编译所需依赖项的信息,请参阅Linux & BSD 后端


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 & BSDs 上,有两个后端可供选择,一个使用 GTK3 Rust 绑定,另一个通过 XDG 桌面门户 D-Bus API 使用 ashpd & zbus

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

由于 XDG 桌面门户没有消息对话框 API,所以使用此后端时,[MessageDialog] 和 [AsyncMessageDialog] 结构体无法构建。

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

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

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

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

  1. 启用 cargo 功能 common-controls-v6
  2. 将应用程序清单添加到使用 ComCtl32.dll v5。请参阅Windows 控件 / 启用视觉样式

这是一个使用 embed-resource示例

Cargo 功能

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

状态

API 稳定性
🚧
功能 Linux Windows macOS Wasm32
SingleFile
MultipleFile
PickFolder
SaveFile
过滤器 ✔ (GTK only)
起始路径
异步

rfd-extras

又名与文件无关的功能

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

依赖项

~0.1–15MB
~207K SLoC