我有一个类来打印类似于
的“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()来打印颜色变化并重置。它运行良好,甚至不需要更改我当前的代码
答案 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颜色代码)。