在终端中,输出字体始终是单一颜色,黑色和白色。但是在某些场景下,并不能很好的满足输出需求。比如在大量的快速输出中,输出一些提示或警告信息,普通的黑白输出可能有效也可能无效。本文将介绍如何将彩色字体输出到终端界面。1.ANSI转义序列其实终端不仅仅可以显示程序的输出。它可以显示移动光标、彩色文本、清除整个屏幕,而不仅仅是静态输出。就像彩色字体或闪烁的光标或进度条。我们通过使用一个特殊的输出字符串来改变终端的输出行为,最简单的例子就是换行符的例子:\n2。配色方案终端广泛使用的配色方案有两种:16色(8背景+8前景)前景即字体本身的颜色255色16色16色配色方案包含两种颜色设置,各有8种颜色,一个是背景色,一个是字体颜色(即前景色)。该配色方案的语法格式如下:首先举个例子:\033[1;32;40m这里的\033[是转义符1表示高亮,32表示前景色为绿色,背景色为黑色输出到终端是这样的效果:escapecharacterescapecharacter十六进制可以有三种形式:\x16[Unicode:\u001b[Octal:\033[Style这种风格指的是字体的显示风格:0(默认值),1(突出显示),22(非粗体)4(下划线),24(非下划线),5(闪烁),25(非闪烁),7(倒置),27(非倒置)print('\033[0;32;40m这是一行测试字体\033[0m')print('\033[1;32;40m是一行测试字体\033[0m')print('\033[22;32;40m是一行测试字体\033[0m')print('\033[4;32;40m这是一行测试字体\033[0m')print('\033[24;32;40m这是一行测试字体\033[0m')print('\033[5;32;40m这是一行测试字体\033[0m')print('\033[25;32;40mThis是一行testfont\033[0m')print('\033[7;32;40mThisItisalineoftestfont\033[0m')print('\033[27;32;40mThisisalineoftestfont\033[0m')具体效果如下动图所示:需要注意的是具体效果可能会收到由于所用终端的限制,目前无法识别CMD中的输出,但在window终端中成功输出了以上内容。颜色设置前景颜色:30(黑色)、31(红色)、32(绿色)、33(黄色)、34(蓝色)、35(品红色)、36(青色)、37(白色)背景颜色:40(黑色)),41(red),42(green),43(yellow),44(blue),45(magenta),46(cyan),47(white)前景色,即字体颜色的显示:print('\033[1;30;40m这是一行黑色测试字体\033[0m')print('\033[1;31;40m这是一行红色测试字体\033[0m')print('\033[1;32;40m这是一行绿色测试字体\033[0m')print('\033[1;33;40m这是一行黄色测试字体\033[0m')print('\033[1;34;40m这是一行蓝色测试字体\033[0m')print('\033[1;35;40m这是一行品红色测试字体\033[0m')print('\033[1;36;40m这是一行青色测试字体\033[0m')print('\033[1;37;40m这是一行白色测试字体\033[0m')背景色:print('\033[1;37;40m这是一行黑色测试背景\033[0m')print('\033[1;37;41m这是一行红色测试背景\033[0m')print('\033[1;37;42m这是一行绿色测试tbackground\033[0m')print('\033[1;37;43m是一行黄色测试背景\033[0m')print('\033[1;37;44m是一行蓝色测试背景\033[0m')print('\033[1;37;45m是一行品红色测试背景\033[0m')print('\033[1;37;46m是一行青色测试背景\033[0m')print('\033[1;37;47mThisisalineofwhitetestbackground\033[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={'正常':0,'粗体':1,'光':2,'斜体':3,'下划线':4,'闪烁':5}defset_text_color(str_text,样式,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'\033[{style_code};{text_color_code};{back_color_code}m{str}\033[0m'returnprint25color6color25输出格式与16色有点不同。转义符同上:十六进制:\x16[Unicode:\u001b[八进制:\033[标签显示方式为38或48选择表名下面颜色代码为前景色或背景色如果要同时修改,使用两条这样的语句:print("\033[48;5;160m\033[38;5;231m背景和前景修改ABCDE\033[38;5;226m前景修改ABCDE\033[0;0m")输出所有前景色defprint_colors_256(color_code):num1=str(color_code)num2=str(color_code).ljust(3,'')ifcolor_code%16==0:return(f"\033[38;5;{num1}m{num2}\033[0;0m\n")否则:返回(f"\033[38;5;{num1}m{num2}\033[0;0m")print("256colorscheme:")print('',end='')print(''.join([print_colors_256(x)forxinrange(256)]))这个效果可能和你的终端输出不一致,这可能是因为我们的终端使用了不同的主题,对颜色进行了不同的修改。
