3 个版本
0.1.2 | 2023 年 10 月 6 日 |
---|---|
0.1.1 | 2023 年 10 月 6 日 |
0.1.0 | 2023 年 10 月 6 日 |
#681 in GUI
165KB
4K SLoC
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 & zbus 的 XDG 桌面门户 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
实例,因此当在类似 winit
或 SDL2
的窗口环境中打开时,对话框才是真正的异步。否则,它将回退到同步对话框。还建议在主线程上创建对话框。RFD 可以从任何线程运行对话框,但仅适用于窗口应用程序,并且会增加一些开销。因此建议 在主线程上启动并等待其他线程。非窗口应用程序永远无法从主线程以外的线程启动异步对话框。
在 Windows 中自定义消息对话框的按钮文本
使用 TaskDialogIndirect
API 来显示可以自定义按钮文本的消息对话框。它仅由 ComCtl32.dll v6 提供,但 Windows 默认使用 v5。如果您想自定义按钮文本或只需要现代对话框样式(即 视觉样式),则需要
- 启用 cargo 功能
common-controls-v6
。 - 添加应用程序清单以使用 ComCtl32.dll v5。请参阅 Windows Controls / Enabling Visual Styles
这是一个使用 embed-resource 的示例。
Cargo 功能
gtk3
:在 Linux 和 BSD 上使用 GTK 进行对话框;对 Windows 和 macOS 无影响xdg-portal
:在 Linux 和 BSD 上使用 XDG 桌面门户而不是 GTKcommon-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