Колорама и расстояние
У меня есть класс для печати "TextBoxes", которые похожи на
#========================================#
| |
| |
| |
| |
| |
#========================================#
Когда даны размеры. Затем вы можете назначить строки текста, вызвав метод setLineText. Каждая строка сохраняется в списке и печатается с помощью метода render с простым циклом for.
Все работает хорошо и прекрасно, пока я не представлю Colorama в миксе, когда я использую свой метод setLineText с любым форматированием Colorama, которое я изменил, всегда будет короткие 5 пробелов на вызов, который я использовал для форматирования
Например,
MainBox = views.TextBox(35, 6)
MainBox.setLineText(1, "Hello! " + Fore.RED + User.name + Fore.RESET)
MainBox.Render()
будет выводить
#=================================#
| Hello! User |
| |
| |
| |
#=================================#
У меня вопрос, есть ли способ избежать этого?
РЕДАКТИРОВАТЬ: В качестве дополнительной заметки, я использую окна.
ОТВЕТ: После множества испытаний любое регулярное выражение, которое я мог придумать, не работало. Мое решение состоит в том, чтобы просто использовать sys.stdout.write() для печати изменений цвета и сброса. Это работает хорошо и вряд ли даже нужно изменить мой текущий код
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])
И используйте этот textSize при выравнивании вашего текста (вместо len (text)).
Вам также может понадобиться убрать текст из любых связанных с цветом символов перед тем, как сделать это. Regex - это путь, и я бы посоветовал вам проверить этот ТАК вопрос (о похожей проблеме с цветовыми кодами mIRC).