0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何输出颜色字体到终端界面中

马哥Linux运维 来源:马哥Linux运维 作者:马哥Linux运维 2022-08-29 10:04 次阅读

在终端中,输出的字体总是单一颜色的,黑底白字。但是在一些场景并不能很好的满足输出的需求,比如在大量而快速输出中,输出一些提示性或者警告性的信息,普通的黑底白字输出可能或起不到作用。

本文将介绍如何输出颜色字体到终端界面中。

# 1. ANSI 转义序列

其实终端不仅能够显示程序的输出。它可以显示移动光标、为文本着色、清除整个屏幕,并且不仅仅是静态输出。比如颜色字体或者闪烁的光标或者是进度条。

我们通过使用特殊的输出字符串改变终端的输出行为,最简单的例子便是换行这个例子:

# 2. 配色方案

有两种配色方案广泛应用于终端中:

16 色 (8 背景 + 8 前景)前景即是字体本身的颜色

255 色

16 色

16色的配色方案包含两个颜色设置,每个8色,一个是背景色一个是字体色(也即前景色),这个配色方案的语法格式如下:

2d1d3ee2-26d9-11ed-ba43-dac502259ad0.png

首先举一个例子 :

�33[1;32;40m

这里 �33[ 是转义字符 1 代表高亮,32 代表前景色为绿色,背景色为黑色

输出到终端则是这个效果:

2d2d2910-26d9-11ed-ba43-dac502259ad0.png

转义字符

转义字符可以有三种形式

十六进制:x16[

Unicode:u001b[

八进制:�33[

样式

这个样式指的是字体的显示样式:

0(默认值)、1(高亮)、22(非粗体)

4(下划线)、24(非下划线)、 5(闪烁)

25(非闪烁)、7(反显)、27(非反显)

print('�33[0;32;40m这是一行测试字体�33[0m')
print('�33[1;32;40m这是一行测试字体�33[0m')
print('�33[22;32;40m这是一行测试字体�33[0m')
print('�33[4;32;40m这是一行测试字体�33[0m')
print('�33[24;32;40m这是一行测试字体�33[0m')
print('�33[5;32;40m这是一行测试字体�33[0m')
print('�33[25;32;40m这是一行测试字体�33[0m')
print('�33[7;32;40m这是一行测试字体�33[0m')
print('�33[27;32;40m这是一行测试字体�33[0m')

具体效果看下面的动图:

2d3da66e-26d9-11ed-ba43-dac502259ad0.gif

需要注意的是具体的效果可能收到使用的终端的限制,目前在CMD中输出并不会被识别,但是在window terminal中是成功的输出以上内容。

颜色设置

前景色: 30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋 红)、36(青色)、37(白色)
背景色: 40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(洋 红)、46(青色)、47(白色)

前景色,即字体颜色的展示:

print('�33[1;30;40m这是一行黑色测试字体�33[0m')
print('�33[1;31;40m这是一行红色测试字体�33[0m')
print('�33[1;32;40m这是一行绿色测试字体�33[0m')
print('�33[1;33;40m这是一行黄色测试字体�33[0m')
print('�33[1;34;40m这是一行蓝色测试字体�33[0m')
print('�33[1;35;40m这是一行洋红测试字体�33[0m')
print('�33[1;36;40m这是一行青色测试字体�33[0m')
print('�33[1;37;40m这是一行白色测试字体�33[0m')
2d567aa4-26d9-11ed-ba43-dac502259ad0.png

背景色:

print('�33[1;37;40m这是一行黑色测试背景�33[0m')
print('�33[1;37;41m这是一行红色测试背景�33[0m')
print('�33[1;37;42m这是一行绿色测试背景�33[0m')
print('�33[1;37;43m这是一行黄色测试背景�33[0m')
print('�33[1;37;44m这是一行蓝色测试背景�33[0m')
print('�33[1;37;45m这是一行洋红测试背景�33[0m')
print('�33[1;37;46m这是一行青色测试背景�33[0m')
print('�33[1;37;47m这是一行白色测试背景�33[0m')
2d649bde-26d9-11ed-ba43-dac502259ad0.png

Colorama 一个颜色输出的模块

每次输入输出都需要如此配置是非常麻烦的事,Colorama 提供方便的字体颜色输出的配置

fromcoloramaimportinit,Fore,Back,Style

#InitializesColorama
init(autoreset=True)

print(Style.BRIGHT+Back.YELLOW+Fore.RED+"fromcoloramaimportinit,Fore,Back,Style

#InitializesColorama
init(autoreset=True)

print(Style.BRIGHT+Back.YELLOW+Fore.RED+"Colorama")")
2dc9b884-26d9-11ed-ba43-dac502259ad0.png

简单的变色函数

background_color_dict={
'BLACK':40,
'RED':41,
'GREEN':42,
'YELLOW':43,
'BLUE':44,
'MAGENTA':45,
'CYAN':46,
'WHITE':47
}

text_color_dict={
'BLACK':30,
'RED':31,
'GREEN':32,
'YELLOW':33,
'BLUE':34,
'MAGENTA':35,
'CYAN':36,
'WHITE':37
}

style_dict={
'normal':0,
'bold':1,
'light':2,
'italicize':3,
'underline':4,
'blink':5
}

defset_text_color(str_text,style,text_color,background_color):
str=str_text
style_code=style_dict[style]
text_color_code=text_color_dict[text_color]
back_color_code=background_color_dict[background_color]
print_text=f'�33[{style_code};{text_color_code};{back_color_code}m{str}�33[0m'
returnprint_text

256色

256色的输出格式和16色的有点不一样

2dd6b110-26d9-11ed-ba43-dac502259ad0.png

转义字符和上面的是一样的:

十六进制:x16[

Unicode:u001b[

八进制:�33[

标注显示模式则是38或者48选择一个表名后面颜色代码是前景色还是背景色。

如果想要同时修改,则使用两个这样的语句即可:

print("�33[48;5;160m�33[38;5;231m背景前景修改ABCDE�33[38;5;226m前景修改ABCDE�33[0;0m")
2deffbca-26d9-11ed-ba43-dac502259ad0.png

输出一下所有的前景颜色

defprint_colors_256(color_code):
num1=str(color_code)
num2=str(color_code).ljust(3,'')
ifcolor_code%16==0:
return(f"�33[38;5;{num1}m{num2}�33[0;0m
")
else:
return(f"�33[38;5;{num1}m{num2}�33[0;0m")

print("256colorscheme:")
print('',end='')
print(''.join([print_colors_256(x)forxinrange(256)]))
2e139472-26d9-11ed-ba43-dac502259ad0.png

这个效果可能和你的终端输出不一致,这可能是因为我们的终端使用了不同的主题,对颜色有着不同的修改。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 屏幕
    +关注

    关注

    6

    文章

    1199

    浏览量

    55801
  • 终端
    +关注

    关注

    1

    文章

    1135

    浏览量

    29884
  • 界面
    +关注

    关注

    0

    文章

    59

    浏览量

    15624

原文标题:一个 print 函数,挺会玩啊?

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何选择PCB颜色

    颜色一样都是色粉的配色。 我们通过丝网印刷将颜色印刷 PCB 上。PCB 颜色有绿色、黑色、蓝色、黄色、紫色、红色和棕色。还有一些厂家别出心裁地开发出了白色、粉色等多种
    的头像 发表于 12-24 11:33 187次阅读

    如何用SS1系列颜色传感器示教多通道颜色

    基于白色LED光源的特性,深视智能SS1系列颜色传感器突破了传统单色RGB、融合光RGB的波长限制,将发射波长的范围覆盖整个可见光谱,最大支持检测16种颜色。那么,我们如何利用SS1系列颜色
    的头像 发表于 12-23 08:17 179次阅读
    如何用SS1系列<b class='flag-5'>颜色</b>传感器示教多通道<b class='flag-5'>颜色</b>?

    脚本美化高手之轻松实现文本颜色和背景定制的酷炫Shell技巧

    �33[0m Hello World " 输出效果如下: 它的格式是这样的: echo -e "�33[字背景颜色;字体颜色m 字符串 �33[0m" 或者printf "�33[字
    的头像 发表于 12-06 10:38 126次阅读
    脚本美化高手之轻松实现文本<b class='flag-5'>颜色</b>和背景定制的酷炫Shell技巧

    Mobaxterm 终端模拟器使用技巧

    在现代IT环境,远程管理和操作服务器是一项基本技能。Mobaxterm作为一款多功能的终端模拟器,以其直观的用户界面和强大的功能集,成为了众多IT专业人员的首选工具。 1. 界面概览
    的头像 发表于 11-10 14:29 617次阅读

    双轴测径仪的界面和技术参数

    关键字:双轴测径仪, 测径仪界面, 双路测径仪, 测径仪参数, 测量软件界面及功能 1)主界面 测量系统登录后将直接进入主界面。在测量状态下,圆钢测量系统主
    发表于 11-06 14:08

    xbf 字体 在 串口屏的应用有什么优势

    不需要全部加载到内存,可以保留在外部存储器上,通过回调函数来获取所需的字体数据。 高效率 :由于字体数据的访问是通过回调函数完成的,因此可以在RAM较少的系统上使用大规模字库。 优化的数据结构 :XBF格式
    的头像 发表于 10-15 11:55 1111次阅读

    探秘PCB板颜色:从外观内涵的多重解读

    五花八门,从常见的绿色罕见的红色、蓝色、黑色等,让人眼花缭乱。那么,这些不同颜色的PCB板到底有何用途?它们的背后又隐藏着怎样的奥秘呢?本文将为您一一揭晓。 PCB板颜色的由来和意义 首先,让我们来了解一下PCB板
    的头像 发表于 10-08 09:21 296次阅读

    低电压线路零线是什么颜色

    在低压线路,零线通常采用的颜色是 淡蓝色 。这一规定有助于在电气安装和维护过程,快速且准确地识别出零线,从而提高工作效率和安全性。 淡蓝色作为零线的标识颜色,在电气行业
    的头像 发表于 09-05 17:03 2777次阅读

    人机交互界面是什么_人机交互界面的功能

    人机交互界面(Human-Computer Interaction Interface,简称HCI或HMI),也被称为人机界面(MMI)、操作员界面终端(OIT)、本地操作员
    的头像 发表于 06-22 11:03 2534次阅读

    鸿蒙OS开发:【一次开发,多端部署】应用(资源使用)

    在页面开发过程,经常需要用到颜色字体、间距、图片等资源,在不同的设备或配置,这些资源的值可能不同。
    的头像 发表于 05-21 15:43 1022次阅读
    鸿蒙OS开发:【一次开发,多端部署】应用(资源使用)

    鸿蒙ArkUI-X跨平台开发:【资源分类与访问】

    应用开发过程,经常需要用到颜色字体、间距、图片等资源,在不同的设备或配置,这些资源的值可能不同。
    的头像 发表于 05-20 15:14 572次阅读
    鸿蒙ArkUI-X跨平台开发:【资源分类与访问】

    微软将控制面板“字体”功能移至Win11设置

    微软一直以来采用渐进式迁移策略,将控件面板的功能分散至设置,现阶段并无全面消除控件面板之意。Win11 的设置现已具备与控件面板相当的现代字体管理界面,而控件面板内的’字体‘功能仍可通过搜索功能开启(Control Panel》
    的头像 发表于 04-22 11:37 470次阅读

    HarmonyOS开发案例:【app内字体大小调节】

    使用基础组件[Slider],通过拖动滑块调节应用内字体大小。
    的头像 发表于 04-19 15:36 678次阅读
    HarmonyOS开发案例:【app内<b class='flag-5'>字体</b>大小调节】

    stm32cubeIDE 1.6.1 ioc字体很大如何解决?

    今天把stm32cubeIDE 升级1.6.1版本,就出现打开.ioc配置界面字体很大,设置的内容一屏只能放下几项的问题,请问大家有知道如何解决这个问题吗?之前的版本么有这个问题
    发表于 04-07 06:31

    鸿蒙开发UI界面——@ohos.font (注册自定义字体)

    字体管理中注册自定义字体。 系统能力: SystemCapability.ArkUI.ArkUI.Full 参数: 参数名 类型 必填 说明 options FontOptions 是 注册的自定义
    的头像 发表于 02-22 16:22 737次阅读