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日 |
#18 在 GUI
226,210 每月下载量
用于 193 个 crate (117 直接)
170KB
4K SLoC
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 桌面门户后端。必须启用 tokio
或 async-std
功能。该后端将根据运行时的桌面环境使用 GTK 或 KDE 文件对话框。它没有非 Rust 构建依赖项,但是它要求用户在运行时安装 GTK、GNOME 或 KDE 的 XDG 桌面门户后端之一。这些通常与桌面环境一起由发行版安装。如果您正在打包使用 RFD 的应用程序,请确保将这些之一包含在包中。GTK、GNOME 或 KDE XDG 桌面门户后端。这些通常与桌面环境一起由发行版安装。如果您正在打包使用 RFD 的应用程序,请确保将这些之一包含在包中。The wlroots portal backend 没有实现 RFD 所需的 D-Bus API(它不会干扰其他门户实现;它们可以同时安装)。
由于 XDG 桌面门户没有消息对话框 API,所以使用此后端时,[MessageDialog] 和 [AsyncMessageDialog] 结构体无法构建。
macOS 无窗口应用程序、异步和多线程
macOS 异步对话框需要一个 NSApplication
实例,因此只有在像 winit
或 SDL2
这样的窗口环境中打开时,对话框才是真正的异步。否则,它将回退到同步对话框。还建议在主线程上启动对话框。RFD 可以从任何线程运行对话框,但只能在窗口应用程序中实现,并且会增加一些开销。因此,建议在主线程上启动并在其他线程中等待。无窗口应用程序永远不会能够从主线程之外的线程启动异步对话框。
自定义 Windows 中消息对话框的按钮文本
使用 TaskDialogIndirect
API 显示消息对话框,该 API 可以自定义按钮文本。它仅由 ComCtl32.dll v6 提供,但 Windows 默认使用 v5。如果您想自定义按钮文本或只需要现代对话框样式(即 视觉样式),则需要
- 启用 cargo 功能
common-controls-v6
。 - 将应用程序清单添加到使用 ComCtl32.dll v5。请参阅Windows 控件 / 启用视觉样式
这是一个使用 embed-resource 的示例。
Cargo 功能
gtk3
:在 Linux & BSDs 上使用 GTK 进行对话框;对 Windows 和 macOS 无影响xdg-portal
:在 Linux & BSDs 上使用 XDG 桌面门户而不是 GTKcommon-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