首页 > 其他分享 >0056-Tui-简单进度条

0056-Tui-简单进度条

时间:2022-09-30 20:57:59浏览次数:64  
标签:mut 进度条 App progress1 0056 self terminal Tui frame

环境

  • Time 2022-08-11
  • Rust 1.62.0
  • Tui 0.18.0

前言

说明

参考:https://github.com/fdehau/tui-rs/blob/master/examples/gauge.rs

目标

使用 tui-rs 显示进度条。

定义数据

struct App {
    progress1: u16,
}

impl App {
    fn new() -> App {
        App { progress1: 0 }
    }

    fn on_tick(&mut self) {
        self.progress1 += 1;
        if self.progress1 > 100 {
            self.progress1 = 0;
        }
    }
}

渲染进度条

fn ui<B: Backend>(frame: &mut Frame<B>, app: &App) {
    let gauge = widgets::Gauge::default()
        .block(Block::default().title("进度条").borders(Borders::ALL))
        .gauge_style(Style::default().fg(Color::Yellow))
        .percent(app.progress1);
    frame.render_widget(gauge, frame.size());
}

总结

使用 tui-rs 渲染进度条。

附录

源码

use anyhow::{Context, Result};
use crossterm::{event, terminal, ExecutableCommand};
use style::{Color, Style};
use tui::backend::{Backend, CrosstermBackend};
use tui::{style, widgets, Frame, Terminal};
use widgets::{Block, Borders};

pub fn main() -> Result<()> {
    terminal::enable_raw_mode()?;
    let mut backend = CrosstermBackend::new(std::io::stdout());
    backend
        .execute(terminal::EnterAlternateScreen)?
        .execute(terminal::Clear(terminal::ClearType::All))?
        .hide_cursor()?;
    let mut terminal = tui::Terminal::new(backend)?;
    run(&mut terminal)?;
    terminal::disable_raw_mode()?;
    terminal
        .backend_mut()
        .execute(terminal::Clear(terminal::ClearType::All))?
        .execute(terminal::LeaveAlternateScreen)?
        .show_cursor()
        .context("重置控制台失败")
}

fn run<B: Backend>(terminal: &mut Terminal<B>) -> Result<()> {
    let timeout = std::time::Duration::from_millis(500);
    let mut app = App::new();
    loop {
        terminal.draw(|frame| ui(frame, &app))?;

        if event::poll(timeout)? {
            if let event::Event::Key(key) = event::read()? {
                use event::KeyCode::{Char, Esc};
                match key.code {
                    Char('q') | Char('Q') | Esc => return Ok(()),
                    _ => {}
                }
            }
        }
        app.on_tick();
    }
}
struct App {
    progress1: u16,
}

impl App {
    fn new() -> App {
        App { progress1: 0 }
    }

    fn on_tick(&mut self) {
        self.progress1 += 1;
        if self.progress1 > 100 {
            self.progress1 = 0;
        }
    }
}

fn ui<B: Backend>(frame: &mut Frame<B>, app: &App) {
    let gauge = widgets::Gauge::default()
        .block(Block::default().title("进度条").borders(Borders::ALL))
        .gauge_style(Style::default().fg(Color::Yellow))
        .percent(app.progress1);
    frame.render_widget(gauge, frame.size());
}

标签:mut,进度条,App,progress1,0056,self,terminal,Tui,frame
From: https://www.cnblogs.com/jiangbo4444/p/16746212.html

相关文章

  • 0057-Tui-进度条示例
    环境Time2022-08-11Rust1.62.0Tui0.18.0前言说明参考:https://github.com/fdehau/tui-rs/blob/master/examples/gauge.rs目标使用tui-rs显示进度条。render......
  • 0049-Tui-创建控制台界面
    环境Time2022-08-08Rust1.62.0Tui0.18.0前言说明参考:https://docs.rs/tui/latest/tui/index.html目标使用tui-rs和crossterm启动一个控制台的终端界面。......
  • C#使用CurrentUICulture切换语言
    C#使用CurrentUICulture切换语言-quanzhan-博客园(cnblogs.com)1、创建2个窗口   2、窗口1属性Localizable设置为True,Language选择英语(美国) 然后把窗口......
  • 我学到了为 AWS 编写 Python TUI 控制台的五件事
    我学到了为AWS编写PythonTUI控制台的五件事AWSCloudExplorerrunningonLinux通常,我喜欢使用Terraform和Ansible使用声明性语言编写代码以部署基础设施。......
  • ElementUI多个级联选择器el-cascader新增、删除和回显
    需求说明:同一个页面新增时,默认只显示一个选择器(选择器是循环出来的),可以新增、删除、编辑;编辑的时候根据后端返回数据循环显示选择器列表,可新增、删除、编辑;数据说明:后端默......
  • transform rotate实现环形进度条
    一、做好效果如下  二、思路分析主要实现方法:transform:rotate(xxdeg)实现圆环,如果单通过一个圆环来实现,则整个圆环上的颜色无法实现部分动,这时候就需要遮罩左......
  • CSS3 实现 网页顶部进度条
    有朋友们问网页顶部进度条 如何应用,现在github大部分国外网站都在用,这个效果可以使用现成的一些插件比如 ​​这个​​​,​​这个​​​,还有​​这个​​。比如youtobe......
  • elementui重写高亮样式
    <stylescoped>/deep/.el-table__bodytr.current-row>td{background-color:red!important;cursor:pointer;} /deep/tr.el-table__row.current-r......
  • 记录黑苹果OpenCore 安装-v跑码结束显示logo、进度条、光标,但不进入系统问题
    型号:Dell Inspiron15-3559    核显:HD520OS版本: macOSCatalina10.15.6(19G2021) 问题-v模式启动,跑码结束,显示苹果logo和进度条,鼠标光标正常显示,连......
  • 02js制作百分比进度条
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content......