34 个版本 (16 个重大更改)

0.18.0 2024年7月4日
0.17.0 2024年3月27日
0.16.3 2024年2月29日
0.13.0 2023年12月2日
0.3.1 2022年11月7日

#56 in GUI

Download history 343/week @ 2024-05-03 373/week @ 2024-05-10 701/week @ 2024-05-17 1008/week @ 2024-05-24 468/week @ 2024-05-31 424/week @ 2024-06-07 432/week @ 2024-06-14 575/week @ 2024-06-21 443/week @ 2024-06-28 678/week @ 2024-07-05 335/week @ 2024-07-12 350/week @ 2024-07-19 845/week @ 2024-07-26 403/week @ 2024-08-02 326/week @ 2024-08-09 320/week @ 2024-08-16

1,976 个月下载
18 个工具包 中使用 (12 直接使用)

MIT 许可

30KB
746

egui 提供的文件对话框(又称文件选择器)

Crates.io docs.rs

来自 Dotrix 项目,制作成独立的库,并修改以适应更多用例。

Screenshot from 2022-08-18 07-41-11

示例

[dependencies]
egui_file = "0.17"
eframe = "0.27"
use eframe::{
  egui::{CentralPanel, Context},
  App, Frame,
};
use egui_file::FileDialog;
use std::{
  ffi::OsStr,
  path::{Path, PathBuf},
};

#[derive(Default)]
pub struct Demo {
  opened_file: Option<PathBuf>,
  open_file_dialog: Option<FileDialog>,
}

impl App for Demo {
  fn update(&mut self, ctx: &Context, _frame: &mut Frame) {
    CentralPanel::default().show(ctx, |ui| {
      if (ui.button("Open")).clicked() {
        // Show only files with the extension "txt".
        let filter = Box::new({
          let ext = Some(OsStr::new("txt"));
          move |path: &Path| -> bool { path.extension() == ext }
        });
        let mut dialog = FileDialog::open_file(self.opened_file.clone()).show_files_filter(filter);
        dialog.open();
        self.open_file_dialog = Some(dialog);
      }

      if let Some(dialog) = &mut self.open_file_dialog {
        if dialog.show(ctx).selected() {
          if let Some(file) = dialog.path() {
            self.opened_file = Some(file.to_path_buf());
          }
        }
      }
    });
  }
}

fn main() {
  let _ = eframe::run_native(
    "File Dialog Demo",
    eframe::NativeOptions::default(),
    Box::new(|_cc| Box::new(Demo::default())),
  );
}

依赖项

~4.5–10MB
~82K SLoC