Rust ratatui 基础入门
3/8/2025
ratatui 一个用于构建终端用户界面的 Rust 库
特点
供了高层次的构建块,允许你创建复杂的布局和组件,如窗格、按钮和文本框。其特点包括:
- 布局系统:支持灵活的布局,能轻松管理组件的排列。
- 状态管理:允许你管理组件的状态,便于实现交互。
- 样式支持:支持丰富的文本样式和颜色,使 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
cargo run 之后会在页面,因为监听了 'q' 键为退出键。
小结
ratatui 是一个基于 Crossterm 的终端库,这篇文章我们简单直观的讲解了 ratatui 和 Crossterm 特点、以及使用方式。