Colorama和间距

时间:2013-05-02 01:10:57

标签: python python-2.7 colorama

我有一个类来打印类似于

的“TextBoxes”
#========================================#
|                                        |
|                                        |
|                                        |
|                                        |
|                                        |
#========================================#

给定尺寸时。然后,您可以通过调用方法setLineText来分配行文本。 每行存储在一个列表中,并使用简单的for循环使用方法render进行打印。

一切正常,花花公子直到我将Colorama引入混音,当我将setLineText method用于任何Colorama格式时,我改变的行总是短5个空格,每次调用我用于格式化

例如,

MainBox = views.TextBox(35, 6)
MainBox.setLineText(1, "Hello! " + Fore.RED + User.name + Fore.RESET)
MainBox.Render()

将输出

#=================================#
| Hello! User           |
|                                 |
|                                 |
|                                 |
#=================================#

我的问题是,有没有办法避免这种情况发生?

编辑:作为额外的说明,我正在使用Windows。

解答: 经过大量的测试,我能想到的任何正则表达式都没有用。我的解决方案是只使用sys.stdout.write()来打印颜色变化并重置。它运行良好,甚至不需要更改我当前的代码

1 个答案:

答案 0 :(得分:1)

这是因为setLineText方法(可能)将着色字符(Fore.RED,Fore.RESET)视为普通字符,因此它删除了5个未被任何字符补偿的空格(如字符用于着色的输出中没有显示。

解决方案是重新实现setLineText方法,只考虑打印的字符。 (如果您需要特定帮助,请提供该方法的实施)

修改

您必须在setLineText方法的开头执行此操作: (也可以在文件开头添加import string

# Extracting printable characters only
textSize = len([c for c in text if c in string.printable])

在对齐文本(而不是len(文本))时使用此textSize。

在执行此操作之前,您可能还必须从任何“颜色”相关字符中删除文本。正则表达式是要走的路,我建议你检查this SO question(关于类似的问题,使用mIRC颜色代码)。