[英]Colorama and spacing
我有一个类可以打印类似于以下内容的“ TextBoxes”
#========================================#
| |
| |
| |
| |
| |
#========================================#
给定尺寸时。 然后,您可以通过调用setLineText方法来分配行文本。 每行存储在一个列表中,并使用一个简单的for循环使用render方法进行打印。
在我将Colorama引入混合之前,一切工作都很好,当我将setLineText方法与任何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()打印颜色更改和重置。 它运行良好,几乎不需要更改当前代码
这是因为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(text))时使用此textSize。
在执行此操作之前,您可能还必须从任何与“颜色”相关的字符中去除文本。 正则表达式是解决之道,我建议您检查这个SO问题 (关于类似问题,使用mIRC颜色代码)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.