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

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

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

    关注

    7

    文章

    1233

    浏览量

    57050
  • 终端
    +关注

    关注

    1

    文章

    1240

    浏览量

    31500
  • 界面
    +关注

    关注

    0

    文章

    59

    浏览量

    15933

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    e203仿真helloworld例程printf能在终端显示的原理

    我在这里分享给大家。 实现原理 在仿真的终端打印信息,是需要软件部分和RTL设计相互配合的。 软件层面 c语言里,printf函数可以说是人尽皆知。在pc端,由于操作系统提供了标准输出界面,因此
    发表于 10-27 06:56

    2025年AI 智能终端和SoC芯片解读(

    AI智能终端经验分享
    电子发烧友网官方
    发布于 :2025年09月15日 16:44:48

    终端GBK编码显示错误的原因?怎么解决?

    RT-thread studio终端,使用UTF8编码中文显示正常,使用GBK编码时终端显示乱码。(以使用其他串口助手等核验过串口数据,例如GBK下输出“中文”D6 D0 CE C4,在
    发表于 09-11 07:50

    电源模块在配电自动化终端的应用

    配电终端设备的可靠性和自动化程度,直接影响整个配电自动化系统的可靠性和自动化水平。由于配电终端设备一般安装于户外或比较偏僻的地方,不可能有直流电源提供,因此,配电网终端设备的直流供电
    的头像 发表于 07-22 10:20 1.8w次阅读
    电源模块在配电自动化<b class='flag-5'>终端</b><b class='flag-5'>中</b>的应用

    Allegro Skill字符功能之设置字符位置及字体

    在PCB设计过程,当大量器件被导入PCB板上时,可能会出现器件丝印字体相互重叠,使得器件位号难以辨认的情况。
    的头像 发表于 06-28 09:46 2085次阅读
    Allegro Skill字符功能之设置字符位置及<b class='flag-5'>字体</b>

    在env终端勾选了tiflte support后烧录mdk板子上后就开始显示连接不到,无法部署模型怎么解决?

    在env终端勾选了tiflte support后烧录mdk板子上后就开始显示连接不到 无法部署模型
    发表于 06-11 08:11

    互联世界的人机界面 (HMI) 和网关

    作者:Tawfeeq Ahmad 在当今的数字化环境,人机界面 (HMI) 和网关已成为不可或缺的组成部分,实现了人与复杂系统之间的无缝互动。随着各行各业之间的联系越来越紧密,这些技术在提高生产力
    的头像 发表于 05-25 11:17 732次阅读
    互联世界<b class='flag-5'>中</b>的人机<b class='flag-5'>界面</b> (HMI) 和网关

    岳冉扫描打印一体手持终端高效移动办公 #手持终端 #PDA

    终端
    yueranxinxi
    发布于 :2025年05月12日 17:34:16

    求助,关于GUIguider1.9.0主界面上方生成字体功能问题求解

    GUIguider1.9.0 主界面上方 工具-->>生成字体选项,生成的字体 会在单独的一个文件,在主界面上,假如创建一个
    发表于 03-28 07:07

    颜色如何影响PCBA加工成本?一文带你揭秘

    一站式PCBA智造厂家今天为大家讲讲影响PCBA板颜色选择的因素有哪些?PCBA板颜色对PCBA加工成本的影响。在PCBA制造过程颜色是PCB板设计的一个可选项,通常并不影响电路板
    的头像 发表于 03-10 09:27 635次阅读

    TTL经THS8200转成VGA信号输出,画面字体有点模糊怎么解决?

    为了改善水波纹,在VGA RGB输入端加下拉120PF电容,然后转TTL 30bit信号,TTL经THS8200转成VGA信号输出;发现画面字体有点模糊,请问寄存器里有没有地方可以修改,或者外围电路可以发送字体模糊不良吗? 谢
    发表于 01-24 07:37

    adss光缆颜色详细分析

    ADSS(All Dielectric Self-Supporting,全介质自承式)光缆的颜色,特别是其内部光纤的颜色,通常遵循一定的色谱排列规律。这些色谱排列不仅有助于光缆的制造和安装过程
    的头像 发表于 01-08 10:47 1430次阅读

    如何选择PCB颜色

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

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

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