Цветной текст в IDLE оболочке на Python
Я искал на оригинальном SOF (ссылка внизу статьи), как сделать
цветным текст в оболочке IDLE. Меня не устраивает, что функцию color.write(YourText,Color) долго писать (я собирался позднее часто использовать данную функцию).
Эта часть кода нужна для активации цветного текста:
import sys
try: color = sys.stdout.shell
except AttributeError: raise RuntimeError("Use IDLE")
И, собственно, цветной текст:
color.write('text','hit')
Я попробовал упростить её через def:
def cprint(text, color):
text = str(text)
color = str(color)
color.write(text, color)
color.write('\n')
cprint("text", 'hit')
При выполнении программы выходит AttributeError:
File "C:\...\colortext.py", line 11, in <module>
cprint("text", 'hit')
File "C:\...\colortext.py", line 8, in cprint
color.write(text, color)
AttributeError: 'str' object has no attribute 'write'
Я пытался решить проблему самостоятельно, попытавшись обмануть Пайтон:
def cprint(text, color):
color.write("%s" %text, "%s" %color)
color.write('\n')
Но ничего не получилось ¯\_(ツ)_/¯
Я собирался потом импортировать этот файл как модуль, поэтому команды (по идее) должны быть короткими.
Заранее спасибо!
Ссылки:
Статья оригинального SOF'a - How do I print colored text in IDLE's terminal?
Ответы (2 шт):
color из sys.stdout.shell не тоже самое, что color - второй аргумент функции.
def cprint(text, clr):
colorText.write(str(text)+'\n', clr)
import sys
try: colorText = sys.stdout.shell
except AttributeError: raise RuntimeError("Use IDLE")
cprint("text", 'hit')
import sys
def cprint(text, color):
try:
shell_stream = sys.stdout.shell
except AttributeError:
raise RuntimeError("Use IDLE")
shell_stream.write(text, color)
shell_stream.write('\n')
# Тесты:
cprint('Hello, world', 'KEYWORD')
cprint('How are you?', 'STRING')
Примечания:
Не рекомендуют использовать глобальные переменные в определении функций, потому я вложил первую часть вашей программы прямо в неё.
Писать
try: color = sys.stdout.shell(и следующую строку вашей программы) в одной строке противоречит PEP 8 - руководству по написанию кода на Python, потому я написал эти строки как следует.Переменная
colorкак параметр вашей функции перекрыла (побила) глобальную переменную с тем же самым именем, так чтоcolorв теле функции стала обычной строкой — потому возникла ваша ошибка.
Я использовал имяshell_streamдля объектаsys.stdout.shell.Команды
text = str(text) color = str(color)я просто пропустил как излишние.