Rust有哪些好用的CMD UI库推荐

大家好,最近在用Rust开发一个命令行工具,想给程序加一些交互式的UI组件,比如菜单选择、进度条或者表格展示之类的。不知道Rust生态里有哪些比较成熟的CMD UI库可以推荐?最好能支持跨平台,文档齐全,社区活跃度高的。之前听说过tui-rs和cursive,但不太清楚它们的具体优劣和使用场景。有没有实际项目经验的小伙伴分享一下使用心得?或者有其他更推荐的库?谢谢!

2 回复

推荐几个Rust的终端UI库:

  1. ratatui(原tui-rs)
  • 最流行的终端UI库,功能完整
  • 支持表格、列表、图表等丰富组件
  • 文档完善,社区活跃
  1. cursive
  • 简单易用,适合快速开发
  • 内置常用组件(按钮、输入框等)
  • 响应式布局
  1. dialoguer
  • 专注于交互式命令行工具
  • 提供确认框、选择列表、输入提示等
  • API简洁直观
  1. indicatif
  • 专注于进度条和状态指示
  • 轻量级,易于集成

选择建议

  • 需要完整UI界面 → ratatui
  • 快速开发简单交互 → cursive
  • 只需基础交互组件 → dialoguer
  • 主要显示进度 → indicatif

这些库都支持跨平台,建议根据项目需求选择。


在 Rust 生态中,有几个优秀的 CMD(命令行界面)UI 库,适用于构建交互式终端应用。以下是推荐的选择:

  1. Cursive

    • 功能丰富,支持多视图、对话框、按钮等组件。
    • 适合构建复杂的 TUI(文本用户界面)应用。
    • 示例代码:
      use cursive::views::TextView;
      
      fn main() {
          let mut siv = cursive::default();
          siv.add_layer(TextView::new("Hello Cursive!"));
          siv.run();
      }
      
  2. tui-rs

    • 轻量高效,基于即时模式(immediate mode)渲染。
    • 广泛用于仪表盘或监控工具。
    • 示例代码:
      use tui::Terminal;
      use tui::backend::RawBackend;
      use tui::widgets::{Block, Borders};
      use tui::layout::{Layout, Constraint, Direction};
      
      fn main() -> Result<(), Box<dyn std::error::Error>> {
          let backend = RawBackend::new()?;
          let mut terminal = Terminal::new(backend)?;
          terminal.draw(|mut f| {
              let chunks = Layout::default()
                  .direction(Direction::Vertical)
                  .constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
                  .split(f.size());
              let block = Block::default().title("Block").borders(Borders::ALL);
              f.render_widget(block, chunks[0]);
          })?;
          Ok(())
      }
      
  3. Dialoguer

    • 专注于简单交互,如输入、选择、确认等。
    • 适合快速添加用户提示功能。
    • 示例代码:
      use dialoguer::{Input, Select};
      
      fn main() {
          let name = Input::<String>::new().with_prompt("Your name").interact().unwrap();
          let items = vec!["Option 1", "Option 2"];
          let selection = Select::new().items(&items).interact().unwrap();
          println!("Hello {}, you selected: {}", name, items[selection]);
      }
      
  4. Termion

    • 提供底层终端控制,适合自定义 UI 逻辑。
    • 结合其他库(如 tui-rs)使用更灵活。

选择建议

  • 简单交互用 Dialoguer
  • 复杂界面用 Cursivetui-rs
  • 需要底层控制时选 Termion

根据项目需求权衡易用性与灵活性。

回到顶部