如:
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 2021-03-21 00:35:34 +08:00 via iPhone 1
如果是以 UTF-8 编码储存在字符串里的话,截取子字符串应该按照 UTF-8 编码规则计算下表如
|
2
BrettD 2021-03-21 00:35:57 +08:00 via iPhone 1
如果是以 UTF-8 编码储存在字符串里的话,截取子字符串应该按照 UTF-8 编码规则计算下标位置
|
3
Pagliacii 2021-03-21 00:40:49 +08:00
|
4
qazwsxkevin OP @BrettD 未能明白原理…
|
5
qazwsxkevin OP @Pagliacii 简单试了一下,以它官网的例子 print 都不能正确显示出字体颜色……PyCharm,3.66 环境…
|
6
oott123 2021-03-21 09:48:20 +08:00 via Android
先补白 再着色
|
7
Pagliacii 2021-03-21 10:16:30 +08:00
@qazwsxkevin #5 Win10 CMD 和 Microsoft Terminal 都可以正常显示颜色。如果你的环境不能正确显示颜色的话,那么你是不是使用了 PyCharm 自带的终端?
|
8
qazwsxkevin OP @oott123 感谢您的解答,我在其他资料了解到 pycharm 的控制台界面不支持默认颜色空间,那么如果我要在 pycharm 调试 rich,那就是很困难的事了吧,还有您提到的补白是怎么理解呢?抱歉,问得那么罗嗦
|
9
qazwsxkevin OP @Pagliacii 的确是的,Console 显示颜色流水字符很必须,而我一直在用 pycharm 来调试程序,要换 IDE ?
|
10
Pagliacii 2021-03-21 10:23:35 +08:00
@qazwsxkevin #9 如果是 Windows 环境的话,可以用一下巨硬出品的 Terminal,https://github.com/microsoft/terminal 。
如果是 macOS 的话,可以使用 iTerm2 。如果是 Linux 的话,自带终端通常就可以 |
11
Pagliacii 2021-03-21 10:24:37 +08:00
@qazwsxkevin #9 IDE 只是方便你写代码和调试而已,不要被它约束住
|
12
oott123 2021-03-21 11:12:56 +08:00 via Android
@qazwsxkevin 补白就是说你用 ljust / rjust 补空格调整位置的意思,如果是因为颜色控制字符影响了空白数量,那么先调整位置再加颜色就可以了。
|
13
AndyAO 2021-03-21 12:33:08 +08:00
@qazwsxkevin #9 可以将内置终端更换为 pwsh,而不是默认 CMD,没记错的话,那里是支持 ANSI 色彩的,不过使用习惯需要改改
|
14
no1xsyzy 2021-03-21 23:31:15 +08:00
排版的话 tabulate[widechars] 吧,默认就支持 ANSI 控制字符,添加 widechars 支持双宽字符。
colorama 可以在 CMD 里使用 ANSI 颜色控制,方式是挂接 sys.stdout 和 sys.stderr,并将控制字符串翻译为 win32 API call |