2 个不稳定版本
0.1.1 | 2024 年 7 月 20 日 |
---|---|
0.0.1 | 2024 年 7 月 18 日 |
#196 in GUI
296 每月下载量
720KB
1.5K SLoC
xdialog
Xdialoɡ 是一个用于在 Rust 中显示类似本地对话框的跨平台库。此库不使用本地系统对话框,而是创建自己的对话框窗口,这些窗口设计得与本地对话框类似。这允许 API 简化并保持一致的行为。
这不是一个合适的 GUI 框架的替代品。它旨在用于 CLI/后台应用程序,这些应用程序偶尔需要向用户显示对话框(如警报或进度)。
其主要用途是用于 Velopack 应用程序安装和更新框架。
功能
- 跨平台:在 Windows、MacOS 和 Linux 上运行
- Windows 或 MacOS 上无依赖项,Linux 上仅需要 X11。
- 非常小巧的尺寸(在最佳设置下最多仅增加 100kb 到您的二进制文件中)
- 所有平台上的简单且一致的 API
安装
将以下内容添加到您的 Cargo.toml
[dependencies]
xdialog = "0" # replace with the latest version
或者,运行以下命令
cargo install xdialog
用法
由于一些平台要求 UI 在主线程上运行,xdialog 预期将拥有主线程,并将您的核心应用程序逻辑在另一个线程中启动。
use xdialog::*;
fn main() -> i32 {
XDialogBuilder::new().run(your_main_logic)
}
fn your_main_logic() -> i32 {
// ... do something here
let should_update_now = show_message_yes_no(
"My App Incorporated",
"New version available",
"Would you like to to the new version now?",
XDialogIcon::Warning,
).unwrap();
if !should_update_now {
return -1; // user declined the dialog
}
// ... do something here
let progress = show_progress(
"My App Incorporated",
"Main instruction",
"Body text",
XDialogIcon::Information
).unwrap();
progress.set_value(0.5).unwrap();
progress.set_text("Extracting...").unwrap();
std::thread::sleep(std::time::Duration::from_secs(3));
progress.set_value(1.0).unwrap();
progress.set_text("Updating...").unwrap();
std::thread::sleep(std::time::Duration::from_secs(3));
progress.set_indeterminate().unwrap();
progress.set_text("Wrapping Up...").unwrap();
std::thread::sleep(std::time::Duration::from_secs(3));
progress.close().unwrap();
0 // return exit code
}
更多示例在 examples
目录中。
cargo run --example various_options
构建依赖项
此库使用 fltk-rs 作为其主要后端。默认情况下,fltk-rs 为大多数平台提供预编译的二进制文件(win-x64、linux-x64、linux-arm64、mac-x64、mac-arm64)。
如果您正在为没有预编译二进制文件的平台编译,您需要禁用 fltk-bundled
功能,并确保您的系统上已安装 cmake。
[dependencies]
xdialog = { version = "0", default-features = false }
依赖项
~16–30MB
~530K SLoC