
如:
AStr = "Test,这是一个中英混合的字句." BStr = "\033[31m" + AStr + "\033[0m" # 使 AStr 变成红色字体 print(len(AStr)) print(len(BStr)) # 这里的长度输出完全是两回事 # 那么如果有这样一个 string def colorRed(s) retrun "\033[31m" + s + "\033[0m" assembleStr = colorRed("Test") + "," + colorBlue("这是一个") + colorYellow("中英混合的字句.") ...... ... . print(xxx.ljust(20), assembleStr.ljust(80), yyy.jlust(30)) assembleStr 的 ljust 根本不可精准控制位置,多行内容长短不一内容的话,整体屏幕上把后面 yyy 的位置弄得不整齐 ljust,rjust 在多颜色混合组装 string 的情况下,基本上是废了... 想寻求 2 种解决方法:
1 、更进一步如何精准控制 jljust 的窍门?
2 、是否有这种适合多颜色混合 print,而且能精准控制长度的轮子?
1 BrettD Mar 21, 2021 via iPhone 如果是以 UTF-8 编码储存在字符串里的话,截取子字符串应该按照 UTF-8 编码规则计算下表如 |
2 BrettD Mar 21, 2021 via iPhone 如果是以 UTF-8 编码储存在字符串里的话,截取子字符串应该按照 UTF-8 编码规则计算下标位置 |
3 Pagliacii Mar 21, 2021 |
4 qazwsxkevin OP @BrettD 未能明白原理… |
5 qazwsxkevin OP @Pagliacii 简单试了一下,以它官网的例子 print 都不能正确显示出字体颜色……PyCharm,3.66 环境… |
6 oott123 Mar 21, 2021 via Android 先补白 再着色 |
7 Pagliacii Mar 21, 2021 @qazwsxkevin #5 Win10 CMD 和 Microsoft Terminal 都可以正常显示颜色。如果你的环境不能正确显示颜色的话,那么你是不是使用了 PyCharm 自带的终端? |
8 qazwsxkevin OP @oott123 感谢您的解答,我在其他资料了解到 pycharm 的控制台界面不支持默认颜色空间,那么如果我要在 pycharm 调试 rich,那就是很困难的事了吧,还有您提到的补白是怎么理解呢?抱歉,问得那么罗嗦 |
9 qazwsxkevin OP @Pagliacii 的确是的,Console 显示颜色流水字符很必须,而我一直在用 pycharm 来调试程序,要换 IDE ? |
10 Pagliacii Mar 21, 2021 @qazwsxkevin #9 如果是 Windows 环境的话,可以用一下巨硬出品的 Terminal,https://github.com/microsoft/terminal 。 如果是 macOS 的话,可以使用 iTerm2 。如果是 Linux 的话,自带终端通常就可以 |
11 Pagliacii Mar 21, 2021 @qazwsxkevin #9 IDE 只是方便你写代码和调试而已,不要被它约束住 |
12 oott123 Mar 21, 2021 via Android @qazwsxkevin 补白就是说你用 ljust / rjust 补空格调整位置的意思,如果是因为颜色控制字符影响了空白数量,那么先调整位置再加颜色就可以了。 |
13 AndyAO Mar 21, 2021 @qazwsxkevin #9 可以将内置终端更换为 pwsh,而不是默认 CMD,没记错的话,那里是支持 ANSI 色彩的,不过使用习惯需要改改 |
14 no1xsyzy Mar 21, 2021 排版的话 tabulate[widechars] 吧,默认就支持 ANSI 控制字符,添加 widechars 支持双宽字符。 colorama 可以在 CMD 里使用 ANSI 颜色控制,方式是挂接 sys.stdout 和 sys.stderr,并将控制字符串翻译为 win32 API call |