Rust ratatui 基础入门

3/8/2025

image.png

ratatui 一个用于构建终端用户界面的 Rust 库

特点

供了高层次的构建块,允许你创建复杂的布局和组件,如窗格、按钮和文本框。其特点包括:

  1. 布局系统:支持灵活的布局,能轻松管理组件的排列。
  2. 状态管理:允许你管理组件的状态,便于实现交互。
  3. 样式支持:支持丰富的文本样式和颜色,使 UI 更加美观。

在 谈及 ratatui 之前我们先要说说 crossterm, crossterm 是 Rust 跨平台终端库。支持所有 UNIX 和 Windows 终端,直至 Windows 7。 具有以下特性:

  • 跨平台
  • 多线程(发送、同步)
  • 详细文档
  • 依赖很少
  • 完全控制写入和刷新输出缓冲区
  • Is tty
  • Cursor
  • 样式输出
  • 终端
  • 事件
  • ...

初始化一个项目

cargo new ratatui-demo

安装

cargo add ratatui

ratatui 使用其实就是绘制终端应用。

示例

绘制逻辑与其他

use std::io;

use ratatui::{
    crossterm::event::{self, KeyCode, KeyEventKind},
    style::Stylize,
    widgets::Paragraph,
    DefaultTerminal,
};

fn main() -> io::Result<()> {
    let mut terminal = ratatui::init();
    terminal.clear()?;
    let app_result = run(terminal);
    ratatui::restore();
    app_result
}

fn run(mut terminal: DefaultTerminal) -> io::Result<()> {
    loop {
        terminal.draw(|frame| {
            let greeting = Paragraph::new("Hello Ratatui! (press 'q' to quit)")
                .white()
                .on_blue();
            frame.render_widget(greeting, frame.area());
        })?;

        if let event::Event::Key(key) = event::read()? {
            if key.kind == KeyEventKind::Press && key.code == KeyCode::Char('q') {
                return Ok(());
            }
        }
    }
}

ratatui 本质也是非常简单,就是在不断的 terminal.draw 在终端画布上绘制内容,然后使用 crossterm 监听事件。

运行

cargo run

image.png

cargo run 之后会在页面,因为监听了 'q' 键为退出键。

小结

ratatui 是一个基于 Crossterm 的终端库,这篇文章我们简单直观的讲解了 ratatui 和 Crossterm 特点、以及使用方式。