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

    文章

    1243

    浏览量

    57221
  • 终端
    +关注

    关注

    1

    文章

    1269

    浏览量

    31723
  • 界面
    +关注

    关注

    0

    文章

    59

    浏览量

    15989

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    TouchGFX 滚轮式菜单选择界面容器的应用介绍

    1. 菜单选择界面介绍在 STM32N6570-DK 开发板的开机视频,有一个流畅炫酷的滚轮式菜单选择界面,通过选择不同的图标,可以实现界面的切换。这里将这个功能设计成了一个容器,本
    发表于 04-15 16:01 0次下载

    02. 如何在 Allegro 快速自定义字体?| 芯巧Allegro PCB 设计小诀窍

    ,切换到Text栏后点击Setup text sizes会弹出Text Setup窗口,如下图4所示。 图4 字体设置界面Text Setup界面各参数项的含义如下表1所示:序号参数
    发表于 04-03 16:34

    晶体管界面层的作用和重要性

    在芯片制造的宏大叙事,人们常常津津乐道于光刻机如何雕刻纳米级线条,刻蚀机如何打通层层叠叠的沟槽。但有一个极其关键的薄膜,薄只有几个原子层厚度,却决定着整个晶体管的生死——它就是界面层。
    的头像 发表于 03-27 15:35 310次阅读
    晶体管<b class='flag-5'>中</b><b class='flag-5'>界面</b>层的作用和重要性

    LAT1573_TouchGFX 滚轮式菜单选择界面容器的应用介绍

    在 STM32N6570-DK 开发板的开机视频,有一个流畅炫酷的滚轮式菜单选择界面,通过选择不同的图标,可以实现界面的切换。这里将这个功能设计成了一个容器,本 LAT的附件提供了一个菜单选择
    发表于 03-11 10:43 0次下载

    打开工程后工程字体没有显示,如字符串,数字等控件不能预览显示字体

    打开工程后工程字体没有显示,如字符串,数字等控件不能预览显示字体
    发表于 02-25 17:39

    无法去除 Python VisionFive.i2c 库的终端输出

    方法,终端都会输出 “i2c_dev: /dev/i2c-0” 这样的字段 这个字段既不是 stderr 也不是 stdout,完全去不掉 因为用的 Python 的 curses 库设计的交互界面
    发表于 02-25 06:13

    字符串,数字控件如何控制背景颜色和前景字体颜色

    字符串,数字控件如何控制背景颜色和前景字体颜色
    发表于 01-20 15:12

    不同光照模拟下的车载 AR-HUD 颜色可见性评估

    车载增强现实抬头显示系统(AR-HUD)对提升驾驶安全至关重要,但其显示效果受环境光照影响显著。为评估不同光照下AR-HUD界面颜色的可见性,本研究采用紫创测控luminbox的太阳光模拟器模拟真实
    的头像 发表于 01-09 18:03 366次阅读
    不同光照模拟下的车载 AR-HUD <b class='flag-5'>颜色</b>可见性评估

    如何在Keil设置窗口标题颜色和背景颜色呢?

    如何在Keil设置窗口标题颜色和背景颜色
    发表于 12-10 07:56

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

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

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

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

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

    在PCB设计过程,当大量器件被导入PCB板上时,可能会出现器件丝印字体相互重叠,使得器件位号难以辨认的情况。
    的头像 发表于 06-28 09:46 2701次阅读
    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 1243次阅读
    互联世界<b class='flag-5'>中</b>的人机<b class='flag-5'>界面</b> (HMI) 和网关