使用PrettyTable生成表格时是否可以对表格进行着色,且无需使用Tkinter?
解决方案
PrettyTable原生支持ANSI转义序列实现控制台彩色渲染,无需引入Tkinter等GUI库,仅需要给需要着色的单元格内容包裹对应ANSI颜色转义码即可,PrettyTable会自动忽略转义序列计算表格宽度,不会出现排版错乱问题。
基础颜色规则
- ANSI前景色编码:30=黑、31=红、32=绿、33=黄、34=蓝、35=紫、36=青、37=白
- ANSI背景色编码:40=黑、41=红、42=绿、43=黄、44=蓝、45=紫、46=青、47=白
- 转义格式:
\033[颜色编码m要着色的内容\033[0m,末尾的\033[0m是重置样式,避免后续内容被连带着色 - Windows系统兼容:Win10及以上版本默认支持ANSI序列,低版本可在代码开头加
os.system('')开启虚拟终端支持
优化后的代码示例
已修正原有代码中循环重复创建表格的问题,添加着色逻辑:
import os # 开启Windows低版本ANSI支持,非Windows系统可删除 os.system('') # 着色辅助函数,简化调用 def color_text(content, front_color=37, back_color=None): if back_color: return f"\033[{front_color};{back_color}m{content}\033[0m" return f"\033[{front_color}m{content}\033[0m" def draw_board(): from prettytable import PrettyTable x = PrettyTable() x.field_names = ["", "", "", "", ""] # 示例:将数字7设为红色,数字13设为绿色背景+白色文字,数字20设为蓝色,25设为黄色 x.add_row([1, 2, 3, 4, 5]) x.add_row([6, color_text(7, 31), 8, 9, 10]) x.add_row([11, 12, color_text(13, front_color=37, back_color=42), 14, 15]) x.add_row([16, 17, 18, 19, color_text(20, 34)]) x.add_row([21, 22, 23, 24, color_text(25, 33)]) print(x) # 调用测试 draw_board()
注意事项
如果需要加粗、下划线等样式,也可以直接在ANSI编码位添加对应样式码,比如1代表加粗,\033[1;31m内容\033[0m就是加粗红色文字。所有主流终端(包括Windows Terminal、Mac自带终端、Linux各发行版终端)都兼容该着色方案,无需安装额外第三方库。
内容的提问来源于stack exchange,提问作者Volodymyr0201
相关产品推荐
相关产品推荐

