Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 色彩与间距_Python_Python 2.7_Colorama - Fatal编程技术网

Python 色彩与间距

Python 色彩与间距,python,python-2.7,colorama,Python,Python 2.7,Colorama,我有一个类来打印类似的“文本框” #========================================# | | | | | | | | |

我有一个类来打印类似的“文本框”

#========================================#
|                                        |
|                                        |
|                                        |
|                                        |
|                                        |
#========================================#
当给定尺寸时。然后,可以通过调用setLineText方法来指定行文本。 每一行都存储在一个列表中,并使用带有简单for循环的render方法打印

在我将Colorama引入混音之前,一切都很顺利,当我将my与任何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
方法的开头执行此操作: (在文件开头添加
导入字符串

并在对齐文本时使用此文本大小(而不是len(text))


在执行此操作之前,您可能还必须从任何与“颜色”相关的字符中删除文本。Regex是一种方法,我建议您检查一下(关于类似的问题,使用mIRC颜色代码)。

是该方法的一种粘贴。这是课程的一部分,但你应该能够了解它在做什么。我不太清楚Colorama是如何做到的。这很神奇,也许我应该研究一下。将代码作为你问题的一部分发布,这将使其他人更容易回答你:-)(对于那些有同样问题的人,也可以得到答案)添加了一个解决方案,可以解决您的问题:-)阅读此问题,了解有关如何剥离不可打印字符的更多信息:这似乎不起作用。你无法得到生成器的长度,在快速测试之后,Colorama使用的任何调用都被认为是“可打印的”,我使用了>>>全部打印(c代表c在Fore.RED中+“test”+Fore.RESET如果c在string.printable中)Oupsie,我应该使用列表理解而不是生成器理解,我会马上修复它。我将尝试查看如何删除这些字符:)。
# Extracting printable characters only
textSize = len([c for c in text if c in string.printable])