0052-Tui-设置方块样式

news/2024/4/30 9:58:02/文章来源:https://www.cnblogs.com/jiangbo4444/p/16746042.html

环境

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

前言

说明

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

目标

使用 tui-rs 对方块设置各种不同的样式。

设置背景色

let block = widgets::Block::default().title("设置背景色").style(style::Style::default().bg(style::Color::Green));
frame.render_widget(block, chunks[0]);

带样式的标题

let title = text::Span::styled("带样式的标题",style::Style::default().fg(style::Color::White).bg(style::Color::Red).add_modifier(style::Modifier::BOLD),
);
let block = widgets::Block::default().title(title).title_alignment(layout::Alignment::Right);

带左右边框的方块

let block = widgets::Block::default().title("带左右边框的方块").borders(widgets::Borders::LEFT | widgets::Borders::RIGHT);

带双边框的方块

let block = widgets::Block::default().title("带双边框的方块").border_style(style::Style::default().fg(style::Color::Cyan)).borders(widgets::Borders::ALL).border_type(widgets::BorderType::Double);

效果展示

方块的不同样式

总结

使用 tui-rs 来设置方块的不同格式,可以对标题、背景、边框自定义。

附录

源码

use anyhow::{Context, Result};
use crossterm::{event, terminal, ExecutableCommand};
use tui::backend::{Backend, CrosstermBackend};
use tui::{layout, style, text, widgets, Frame, Terminal};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<()> {loop {terminal.draw(ui)?;if let event::Event::Key(key) = event::read()? {use event::KeyCode::{Char, Esc};match key.code {Char('q') | Char('Q') | Esc => return Ok(()),_ => {}}}}
}const CONSTRAINTS: [layout::Constraint; 2] = [layout::Constraint::Percentage(50),layout::Constraint::Percentage(50),
];fn ui<B: Backend>(frame: &mut Frame<B>) {render_main_block(frame);let chunks = layout::Layout::default().direction(layout::Direction::Vertical).margin(1).constraints(CONSTRAINTS).split(frame.size());render_top(frame, chunks[0]);render_bottom(frame, chunks[1]);
}fn render_main_block<B: Backend>(frame: &mut Frame<B>) {let block = widgets::Block::default().title("圆角主方块").title_alignment(layout::Alignment::Center).borders(widgets::Borders::ALL).border_type(widgets::BorderType::Rounded);frame.render_widget(block, frame.size());
}fn render_top<B: Backend>(frame: &mut Frame<B>, area: layout::Rect) {let chunks = layout::Layout::default().direction(layout::Direction::Horizontal).constraints(CONSTRAINTS).split(area);let block = widgets::Block::default().title("设置背景色").style(style::Style::default().bg(style::Color::Green));frame.render_widget(block, chunks[0]);let title = text::Span::styled("带样式的标题",style::Style::default().fg(style::Color::White).bg(style::Color::Red).add_modifier(style::Modifier::BOLD),);let block = widgets::Block::default().title(title).title_alignment(layout::Alignment::Right);frame.render_widget(block, chunks[1]);
}fn render_bottom<B: Backend>(frame: &mut Frame<B>, area: layout::Rect) {let chunks = layout::Layout::default().direction(layout::Direction::Horizontal).constraints(CONSTRAINTS).split(area);let block = widgets::Block::default().title("带有左右边框的方块").borders(widgets::Borders::LEFT | widgets::Borders::RIGHT);frame.render_widget(block, chunks[0]);let block = widgets::Block::default().title("带有双边框的方块").border_style(style::Style::default().fg(style::Color::Cyan)).borders(widgets::Borders::ALL).border_type(widgets::BorderType::Double);frame.render_widget(block, chunks[1]);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_16595.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨境电商如何利用WhatsApp API交互式按钮提高客户转化率

WhatsApp API有很多实用的功能&#xff0c;跨境电商卖家因此可以为客户提供出色的客户服务体验与服务。 跨境电商卖家在通过WhatsApp API为客户提供服务或进行营销时&#xff0c;交互性功能可以明显提高客户转化率。因为当用户想要选择服务或产品时&#xff0c;可以直接使用交…

Java / Tensorflow - API 调用 pb 模型使用 GPU 推理

目录 一.引言 二.Java / Tensorflow 代码配置 1.代码配置 2.Maven 配置 三.环境检测 1.显卡检测 2.显卡监控 四.推理踩坑 1.异常现象 2.异常日志 五.安装 cuda-10.0 1.下载 cuda 安装包 2.安装 cuda 2.1 preface 前言 2.2 安装配置 2.3 安装完成 2.4 可能遇到的…

day013--mysql中的子查询

目录 一&#xff0c;前言 二&#xff0c;子查询的定义及书写格式 1&#xff0c;定义 2&#xff0c;书写格式 三&#xff0c;子查询的分类 1&#xff0c;单行子查询和多行子查询 2&#xff0c;相关子查询和非相关子查询 一&#xff0c;前言 相信大家还记得之前我们在学习分…

保研专业课参考

文章目录数据结构1.什么是平衡树&#xff1f;平衡树是怎么创建的&#xff1f;2.二叉排序树的性质&#xff1a;3.如何编程判断一棵二叉树是完全二叉树4.二叉树怎么求高度&#xff08;山大计算机&#xff09;5.在图中找到一个连通图&#xff0c;有n个顶点&#xff0c;n-1条边使得…

SQL Server大分区表没有空分区的情况下如何扩展分区的方法

官方文档https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-partition-function-transact-sql?viewsql-server-ver16 Best Practices Always keep empty partitions at both ends of the partition range. Keep the partitions at both ends to guarantee that th…

【学生网页作业】航海王动漫网页 html+ css + JavaScript 简单的学生网页作业源码

&#x1f329;️ 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f482; 作者主页: 【进入主页—&#x1f680;获取更多源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;HTML5网页期末作业 (1000套…

手机用Postern配置socks5全局代理详细教程

以静态Socks5独享IP的单地区资源为例&#xff0c;即IP资源全部归属单一城市&#xff0c;不会变动&#xff0c;如南京区域&#xff0c;则IP全部为南京城市出口。 关于Socks5的使用有多种方案&#xff0c;可应用于PC&#xff0c;安卓&#xff0c;模拟器&#xff0c;请根据情况灵…

EasyRecovery15万能数据恢复软件全面详细功能讲解

EasyRecovery 15是由全球著名数据厂商Ontrack 出品的一款非常优秀的数据恢复软件&#xff0c;在诸多数据恢复软件中这款软件可以说是排的上名的&#xff0c;具有快捷、高效、便捷等特点&#xff0c;可以帮助用户轻松恢复电脑丢失的数据。 因此今天coco玛吉多就给大家带来了eas…

环境主题静态HTML网页作业作品 大学生环保网页设计制作成品 简单DIV CSS布局网站

&#x1f329;️ 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f482; 作者主页: 【进入主页—&#x1f680;获取更多源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;HTML5网页期末作业 (1000套…

2022短视频神器历时6个月辛苦全力打造的软件短视频运用工具

短视频批量监控混剪消重上传运营神器 ​ 要问当下什么最火&#xff1f;当然是从事自媒体了&#xff0c;自媒体是普通大众经由数字科技强化、与全球知识体系相连之后&#xff0c;一种开始理解普通大众如何提供与分享他们自身的事实、新闻的途径。简而言之&#xff0c;即公民用以…

移动端布局

移动端布局1. meta视口标签1.2 多倍图1.2.1 图片缩放1.2.2 背景缩放 background-size1.3 特殊样式2 移动端常见布局2.1 流式布局&#xff08;百分比布局&#xff09;2.2 flex布局父项常见属性2.2.1 flex-direction设置主轴或侧轴的方向2.2.2 justify-content 设置主轴的子元素的…

程序员的数学课08 加乘法则:如何计算复杂事件发生的概率?

在我们的工作和生活中少不了对概率的计算&#xff0c;对概率的准确计算会帮助我们做出更加合理高效的决策。 例如&#xff0c;早上出门之前&#xff0c;你需要对是否携带雨伞进行决策。如果没有任何依据而随机决策&#xff0c;那么就会遇到下雨没带伞或者晴天带伞的麻烦&#…

SiO2/PAA/Ag复合纳米粒/酞菁修饰磁性温敏二氧化硅纳米微球/中空SiO2/TiO2纳米微球的制备

小编给大家分享了SiO2/PAA/Ag复合纳米粒/酞菁修饰磁性温敏二氧化硅纳米微球/中空SiO2/TiO2纳米微球的制备与研究&#xff0c;一起来看&#xff01; SiO2/PAA/Ag复合纳米粒子的制备步骤&#xff1a; 利用溶胶-凝胶法合成胶体二氧化硅微球,用甲基丙烯酰氧丙基三甲氧基硅烷(γ-MP…

业务开发流程

0.摘要 此文主要介绍了业务开发的整体流程、关键节点和需要注意的事项&#xff0c;适用于刚入行的小白&#xff0c;以及对自己过往经验的一个总结整理。持续更新中~~ 1.开发的主要流程&名词释义 大概给大家梳理下一个项目从发起到上线的流程。 ○ 参与人员&#xff1a;业…

redis之为什么那么快

写在前面 在面试中关于redis经常被问到一个问题就是redis为什么快&#xff0c;本文就一起从其底层的数据结构实现来分析下&#xff0c;为什么快&#xff0c;哪些快&#xff0c;哪些慢&#xff0c;哪些操作会导致慢等&#xff0c;下面我们就开始吧&#xff01; 1&#xff1a;为…

【无标题】近几年攻防演练攻击队典型突破的例子

蓝队经典攻击实例 实战攻防演练中红队网络的部署情况各有特点&#xff0c;蓝队也会根据攻 击目标的不同而采取不同的攻击策略和手段。下面几个案例展示的就 是针对红队网络的不同薄弱点采取的不同的典型攻击策略与方法手 段。 正面突破&#xff1a;跨网段控制工控设备 某企业…

C#面向对象程序设计课程实验一:实验名称:C#语言基础、程序流程控制

C#面向对象程序设计课程实验一&#xff1a;实验名称&#xff1a;C#语言基础、程序流程控制实验内容&#xff1a;C#语言基础、程序流程控制一、 实验目的二、实验环境三、实验内容四、实验总结实验内容&#xff1a;C#语言基础、程序流程控制 一、 实验目的 (1)练习 C#变量声明和…

simulink-自定义模块GUI回调函数

目录 一、创建simulink模块 二、自定义GUI步骤 2.1 设计组件界面信息 2.2 GUI控件介绍 2.2.1 Parameter参数配置组件 2.2.2 Container参数配置组件 2.2.3 Display参数配置组件 2.2.4 Action参数配置组件 2.3 控件回调函数使用方法 三、设置Help信息 四、获取配置控件参数 4.…

ubuntu 搭建RKNN-Toolkit环境

1. github下载官方的RKNN-Toolkit项目包 地址&#xff1a;https://github.com/rockchip-linux/rknn-toolkit 然后还需要下载rknn-toolkit包&#xff0c;GitHub下方有链接&#xff1a; 各种版本的官方下载&#xff1a; https://github.com/rockchip-linux/rknn-toolkit/relea…

实现有效控制项目进度,需要做好这些工作

制定出切合的项目计划是执行的重要基础&#xff0c;计划制定的过程同时也是计划逐步细化的过程&#xff0c; 进度计划的贯彻是计划实施的第一步&#xff0c;也是最关键的一步。 一、实现有效控制项目进度&#xff0c;需要做好以下工作&#xff1a; 项目计划&#xff0c;决定…