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

    文章

    1188

    浏览量

    55697
  • 终端
    +关注

    关注

    1

    文章

    1104

    浏览量

    29794
  • 界面
    +关注

    关注

    0

    文章

    59

    浏览量

    15595

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

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

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

    鸿蒙OS开发:典型页面场景【一次开发,多端部署】(资源使用)

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

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

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

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

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

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

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

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

    使用基础组件[Slider],通过拖动滑块调节应用内字体大小。
    的头像 发表于 04-19 15:36 579次阅读
    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 645次阅读

    开关量继电器输出采集装置 ARTU100系列远程终端单元

    ARTU系列远程终端单元是高性能配电智能化元件,应用于智能配电、工业自动化等领域。ARTU100系列远程终端单元提供开关量输入、开关量输出、模拟量输入、模拟量输出,能够将采集
    的头像 发表于 02-21 15:39 309次阅读
    开关量继电器<b class='flag-5'>输出</b>采集装置 ARTU100系列远程<b class='flag-5'>终端</b>单元

    阿童木颜色传感器应用:汽车车身颜色识别

    的项目。项目的背景是为了在车身喷漆后,通过颜色传感器自动识别车身颜色,并根据颜色自动运输到不同的生产线,以提高生产效率。 项目需求 该汽车生产企业面临的主要问题是在光照生产环境,车身
    的头像 发表于 01-26 14:45 405次阅读
    阿童木<b class='flag-5'>颜色</b>传感器应用:汽车车身<b class='flag-5'>颜色</b>识别

    嵌入式智能家居终端人机界面设计与实现

    电子发烧友网站提供《嵌入式智能家居终端人机界面设计与实现.zip》资料免费下载
    发表于 11-17 10:18 1次下载
    嵌入式智能家居<b class='flag-5'>终端</b>人机<b class='flag-5'>界面</b>设计与实现

    在SSMS如何改变网格字体大小

    从SQLServer2012开始,SSMS就提供了放大/缩小查询窗口和网格结果窗格的选项。这是一个非常有用的创新,因为它可以更容易地在各种演示、演示和讲座向观众展示查询和结果,调整字体大小以适应大屏幕,或者只是为了让有视力问题的人更舒适。
    的头像 发表于 11-16 10:56 1734次阅读
    在SSMS如何改变网格<b class='flag-5'>字体</b>大小