首页 / 行业
如何输出颜色字体到终端界面中
2022-08-29 10:04:00
在终端中,输出的字体总是单一颜色的,黑底白字。但是在一些场景并不能很好的满足输出的需求,比如在大量而快速输出中,输出一些提示性或者警告性的信息,普通的黑底白字输出可能或起不到作用。
本文将介绍如何输出颜色字体到终端界面中。
# 1. ANSI 转义序列
其实终端不仅能够显示程序的输出。它可以显示移动光标、为文本着色、清除整个屏幕,并且不仅仅是静态输出。比如颜色字体或者闪烁的光标或者是进度条。
我们通过使用特殊的输出字符串改变终端的输出行为,最简单的例子便是换行这个例子:
# 2. 配色方案
有两种配色方案广泛应用于终端中:
16 色 (8 背景 + 8 前景)前景即是字体本身的颜色
255 色
16 色
16色的配色方案包含两个颜色设置,每个8色,一个是背景色一个是字体色(也即前景色),这个配色方案的语法格式如下:
首先举一个例子 :
�33[1;32;40m
这里 �33[ 是转义字符 1 代表高亮,32 代表前景色为绿色,背景色为黑色
输出到终端则是这个效果:
转义字符
转义字符可以有三种形式
十六进制: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')
具体效果看下面的动图:
需要注意的是具体的效果可能收到使用的终端的限制,目前在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')
背景色:
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')
Colorama 一个颜色输出的模块
每次输入输出都需要如此配置是非常麻烦的事,Colorama 提供方便的字体颜色输出的配置
fromcoloramaimportinit,Fore,Back,Style#InitializesColoramainit(autoreset=True)print(Style.BRIGHT+Back.YELLOW+Fore.RED+"fromcoloramaimportinit,Fore,Back,Style#InitializesColoramainit(autoreset=True)print(Style.BRIGHT+Back.YELLOW+Fore.RED+"Colorama")")
简单的变色函数
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_textstyle_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色的有点不一样
转义字符和上面的是一样的:
十六进制:x16[
Unicode:u001b[
八进制:�33[
标注显示模式则是38或者48选择一个表名后面颜色代码是前景色还是背景色。
如果想要同时修改,则使用两个这样的语句即可:
print("�33[48;5;160m�33[38;5;231m背景前景修改ABCDE�33[38;5;226m前景修改ABCDE�33[0;0m")
输出一下所有的前景颜色
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)]))
这个效果可能和你的终端输出不一致,这可能是因为我们的终端使用了不同的主题,对颜色有着不同的修改。
审核编辑:彭静最新内容
手机 |
相关内容
电流互感器作用 电流互感器为什么
电流互感器作用 电流互感器为什么一端要接地?,作用,误差,原因,连接,测量,短路故障,电流互感器(Current Transformer,简称CT)是一种用于晶振在激光雷达系统中的作用
晶振在激光雷达系统中的作用,作用,系统,激光雷达,晶振,可靠性,选择,激光雷达(Lidar)是一种利用激光进行测距的技术,广泛应用于自动驾驶STC15W芯片A/D、D/A转换的简单使用
STC15W芯片A/D、D/A转换的简单使用,简单使用,转换,芯片,模拟,输入,输出,STC15W系列芯片是一种高性能的单片机芯片,具有丰富的外设资人形机器人风起,连接器待势乘时
人形机器人风起,连接器待势乘时,连接器,人形机器人,工作效率,性强,研发,光纤,近年来,人形机器人在人工智能领域取得了巨大的进展。随浅析动力电池熔断器的基础知识及选
浅析动力电池熔断器的基础知识及选型,动力电池,时切,系统安全,作用,产品,系统,BA4558F-E2动力电池熔断器是用于保护动力电池系统安消除“间隙”:力敏传感器如何推动新
消除“间隙”:力敏传感器如何推动新颖的HMI设计,传感器,智能手机,交互,交互方式,操作,用户,随着科技的不断发展,人机交互界面(HMI)的设变频器过载保护和过流保护有什么区
变频器过载保护和过流保护有什么区别?,变频器,频率,超过,损害,方法,负载,BCP55变频器过载保护和过流保护是两种不同的保护机制,用于保面向6G+AI,鹏城云脑的演进
面向6G+AI,鹏城云脑的演进,鹏城,人工智能,数据存储,脑可,智能终端,智能,随着科技的不断进步,人们的生活方式也在不断改变。6G+AI(人工