Как вывести цветной текст на терминал в Python? Какой символ Unicode лучше всего подходит для представления сплошного блока?
Это несколько зависит от того, на какой платформе вы находитесь. Самый распространенный способ сделать это путем печати с ANSI escape-последовательности. Для простого примера, здесь's некоторые Python код из блендер скрипты сборки:
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
Чтобы использовать такой код, вы можете сделать что-то подобное
print bcolors.WARNING + "Warning: No active frommets remain. Continue?"
+ bcolors.ENDC
Это будет работать на юниксах, включая OS Х, Linux и Windows (Если вы используете ANSICON, или в Windows 10 при условии, что вы включите ВТ100 эмуляция). Есть коды ANSI для установки цвета, перемещая курсор, и больше.
Если вы собираетесь получить сложнее с этим (и это звучит, как вы, если вы пишете игры), вы должны посмотреть в графе "проклятия" и модуль, который обрабатывает много сложных участков это для вас. В [Питон проклятий методические указания][3] это хорошее введение.
Если вы не используете символы из расширенного набора ASCII (т. е. не на ПК), вы застряли с ASCII символы ниже 127, и '#' или '@' это, вероятно, ваш лучший ставку для блока. Если вы можете гарантировать, что ваш терминал с помощью продукта IBM расширенный ASCII набор символов, у вас есть много вариантов. Персонажи 176, 177, 178 и 219 находятся в "персонажей" по.
Некоторые современные текстовые программы, такие как "карликовая крепость" и, эмуляции текстового режима в графическом режиме, а также использовать образы из классических шрифтов ПК. Вы можете найти некоторые из этих растровые изображения, которые можно использовать на карликовой крепости Вики см. (пользователя тайлсеты).
[Текст режиме демо конкурс][7] имеет больше ресурсов для ведения графика в текстовом режиме.
Хм.. я думаю, что немного увлекся на этот ответ. Я в центре планирования эпической основе текста, хотя приключенческая игра,. Удачи с цветным текстом!
[3]: http://docs.python.org/howto/curses.html на "питон ругается как-то"
[7]: http://en.wikipedia.org/wiki/TMDC "в текстовом режиме демо-конкурсе"и
Я'м удивлен, никто не упомянул модуль Python termcolor. Использование довольно простое:
from termcolor import colored
print colored('hello', 'red'), colored('world', 'green')
Или в Python 3:
print(colored('hello', 'red'), colored('world', 'green'))
Это, однако, не может быть достаточно сложной, для программирования игр и "блоки" что вы хотите сделать...
Ответ лак для всех кросс-платформенных раскраски в Python.
Распечатать строку, которая начинается в цвет/стиль, потом строку, потом конец цвет/стиль меняется с '\на сайте x1b[0m в'
:
print('\x1b[6;30;42m' + 'Success!' + '\x1b[0m')
Получим таблицу параметры форматирования для текста оболочки с следующим кодом:
def print_format_table():
"""
prints table of formatted text format options
"""
for style in range(8):
for fg in range(30,38):
s1 = ''
for bg in range(40,48):
format = ';'.join([str(style), str(fg), str(bg)])
s1 += '\x1b[%sm %s \x1b[0m' % (format, format)
print(s1)
print('\n')
print_format_table()
Определить строку, которая начинается с цвета и строку, которая заканчивается цвет, затем распечатать текст со строки начинаться в начале и в конце строки в конце.
в
CRED = '\033[91m'
CEND = '\033[0m'
print(CRED + "Error, does not compute!" + CEND)
Это производит следующий в баш
, в urxvt с цветовой схемой Zenburn-стиль:
С помощью экспериментов, мы можем сделать много цветов:
Примечание: \33[5М
и \33[6м
мигают.
Таким образом, мы можем создать полную коллекцию цвет:
CEND = '\33[0m'
CBOLD = '\33[1m'
CITALIC = '\33[3m'
CURL = '\33[4m'
CBLINK = '\33[5m'
CBLINK2 = '\33[6m'
CSELECTED = '\33[7m'
CBLACK = '\33[30m'
CRED = '\33[31m'
CGREEN = '\33[32m'
CYELLOW = '\33[33m'
CBLUE = '\33[34m'
CVIOLET = '\33[35m'
CBEIGE = '\33[36m'
CWHITE = '\33[37m'
CBLACKBG = '\33[40m'
CREDBG = '\33[41m'
CGREENBG = '\33[42m'
CYELLOWBG = '\33[43m'
CBLUEBG = '\33[44m'
CVIOLETBG = '\33[45m'
CBEIGEBG = '\33[46m'
CWHITEBG = '\33[47m'
CGREY = '\33[90m'
CRED2 = '\33[91m'
CGREEN2 = '\33[92m'
CYELLOW2 = '\33[93m'
CBLUE2 = '\33[94m'
CVIOLET2 = '\33[95m'
CBEIGE2 = '\33[96m'
CWHITE2 = '\33[97m'
CGREYBG = '\33[100m'
CREDBG2 = '\33[101m'
CGREENBG2 = '\33[102m'
CYELLOWBG2 = '\33[103m'
CBLUEBG2 = '\33[104m'
CVIOLETBG2 = '\33[105m'
CBEIGEBG2 = '\33[106m'
CWHITEBG2 = '\33[107m'
Вот код для создания тестов:
в
x = 0
for i in range(24):
colors = ""
for j in range(5):
code = str(x+j)
colors = colors + "\33[" + code + "m\\33[" + code + "m\033[0m "
print(colors)
x=x+5
Вы хотите узнать об экранирующих последовательностях ANSI. Вот краткий пример:
CSI="\x1B["
print(CSI+"31;40m" + "Colored Text" + CSI + "0m")
Более подробную информацию можно найти на сайте http://en.wikipedia.org/wiki/ANSI_escape_code.
В качестве символа блока попробуйте использовать символ юникода, например \u2588:
print(u"\u2588")
Собираем все вместе:
print(CSI+"31;40m" + u"\u2588" + CSI + "0m")
Мой любимый способ-с благословения библиотеки (полное раскрытие: я написал это). Например:
from blessings import Terminal
t = Terminal()
print t.red('This is red.')
print t.bold_bright_red_on_black('Bright red on black')
Для печати цветного кирпича, самый надежный способ-это печатать пробелы с цветом фона. Я использую эту технику, чтобы сделать прогресс-бар в нос-прогрессивный:
print t.on_green(' ')
Вы можете печатать в определенных местах, а также:
with t.location(0, 5):
print t.on_yellow(' ')
Если вам нужно жижу с другими возможностями терминала в ход вашей игры, вы можете сделать это также. Вы можете использовать Python'стандартным форматированием с строку, чтобы держать его читаемым:
print '{t.clear_eol}You just cleared a {t.bold}whole{t.normal} line!'.format(t=t)
Хорошая вещь об благословения является то, что он прилагает все усилия, чтобы работать на всевозможных терминалов, не только (в подавляющем большинстве случаев всего) в ANSI-цвета. Он также держит нечитаемым escape-последовательности из вашего кода, оставаясь лаконичным в использовании. Получайте удовольствие!
создается класс со всеми цветами, используя цикл for, чтобы перебрать все комбинации цвета до 100, потом написал класс с Python цветов. Копировать и вставить как вы, в GPLv2 на меня:
class colors:
'''Colors class:
reset all colors with colors.reset
two subclasses fg for foreground and bg for background.
use as colors.subclass.colorname.
i.e. colors.fg.red or colors.bg.green
also, the generic bold, disable, underline, reverse, strikethrough,
and invisible work with the main class
i.e. colors.bold
'''
reset='\033[0m'
bold='\033[01m'
disable='\033[02m'
underline='\033[04m'
reverse='\033[07m'
strikethrough='\033[09m'
invisible='\033[08m'
class fg:
black='\033[30m'
red='\033[31m'
green='\033[32m'
orange='\033[33m'
blue='\033[34m'
purple='\033[35m'
cyan='\033[36m'
lightgrey='\033[37m'
darkgrey='\033[90m'
lightred='\033[91m'
lightgreen='\033[92m'
yellow='\033[93m'
lightblue='\033[94m'
pink='\033[95m'
lightcyan='\033[96m'
class bg:
black='\033[40m'
red='\033[41m'
green='\033[42m'
orange='\033[43m'
blue='\033[44m'
purple='\033[45m'
cyan='\033[46m'
lightgrey='\033[47m'
сты похож на лак, но это'с менее подробным, поддерживает 8 бит и 24бит (в RGB) цветов, позволяет регистрировать собственные цвета, очень гибкая и хорошо документированы.
Примеры:
``питон от импорта сты ФГ, БГ, эф, РС
ФОО = ФГ.красный + 'Это красный текст!' + ФГ.РС бар = БГ.синий + 'это имеет синий фон!' + БГ.РС баз = эф.курсив + 'Это наклонный текст' + РС.курсив qux = ФГ(201) + 'это розовый текст, используя 8 бит цвета' + ФГ.РС Куай = ФГ(255, 10, 10) + 'Это красный текст, используя 24 бит цвета.' + ФГ.РС
от стиль импорт сты, RgbFg
ФГ.оранжевый = стиль(RgbFg(255, 150, 50))
баф = ФГ.оранжевый + 'Ура, я оранжевый.' + ФГ.РС
печати(фу, бар, баз, qux, Квай, баф, сентября='\П') ``
печать:
Попробуйте этот простой код
def prRed(prt): print("\033[91m {}\033[00m" .format(prt))
def prGreen(prt): print("\033[92m {}\033[00m" .format(prt))
def prYellow(prt): print("\033[93m {}\033[00m" .format(prt))
def prLightPurple(prt): print("\033[94m {}\033[00m" .format(prt))
def prPurple(prt): print("\033[95m {}\033[00m" .format(prt))
def prCyan(prt): print("\033[96m {}\033[00m" .format(prt))
def prLightGray(prt): print("\033[97m {}\033[00m" .format(prt))
def prBlack(prt): print("\033[98m {}\033[00m" .format(prt))
prGreen("Hello world")
В Windows вы можете использовать модуль 'win32console' (доступно в некоторых дистрибутивах Python) или модуль 'под' (в Python 2.5 и выше) получить доступ к API-интерфейса Win32.
Чтобы увидеть полный код, который поддерживает обе стороны, см. В <а href="и https://github.com/testoob/testoob/blob/master/src/testoob/reporting/colored.py">цвет консоли отчетность код</а> С в <а href="и https://github.com/testoob/testoob">Testoob</а>.
под пример:
import ctypes
# Constants from the Windows API
STD_OUTPUT_HANDLE = -11
FOREGROUND_RED = 0x0004 # text color contains red.
def get_csbi_attributes(handle):
# Based on IPython's winconsole.py, written by Alexander Belchenko
import struct
csbi = ctypes.create_string_buffer(22)
res = ctypes.windll.kernel32.GetConsoleScreenBufferInfo(handle, csbi)
assert res
(bufx, bufy, curx, cury, wattr,
left, top, right, bottom, maxx, maxy) = struct.unpack("hhhhHhhhhhh", csbi.raw)
return wattr
handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
reset = get_csbi_attributes(handle)
ctypes.windll.kernel32.SetConsoleTextAttribute(handle, FOREGROUND_RED)
print "Cherry on top"
ctypes.windll.kernel32.SetConsoleTextAttribute(handle, reset)
Я'м отвечать, потому что я нашел способ использовать ANSI коды на Windows, так что вы можете изменить цвет текста без каких-либо модулей, которые арен'т построен в:
Линии, что делает эту работу ОС.системы('цвет#39;)
, но чтобы убедиться, что вы Дон'т вызывать ошибки, если человек не на Windows, вы можете использовать этот скрипт:
``питон
импорт ОС, системы
если системы.платформа.ниже () = = и"от Win32 и": ОС.системы('цвет#39;)
стиль класса(): Черный = лямбда х: '\033[30м' + (ул. х) Красный = лямбда х: '\033[31М' НТР + (х) Зеленый = лямбда х: '\033[32м' + (ул. х) Желтый = лямбда х: '\033[33м' НТР + (х) Синий = лямбда х: '\033[34М' НТР + (х) Пурпурный = лямбда х: '\033[35М' НТР + (х) Голубой = лямбда х: '\033[36М' НТР + (х) Белый = лямбда х: '\033[37М' + (ул. х) Подчеркивание = лямбда х: '\033[4М' НТР + (х) Сброс = лямбда х: '\033[0m в' + (ул. х)
печать(стиль.Желтый("Привет " Ну) + стиль.Сброс (на"Мир!&я;)) ``
Python версии: 3.6.7 (32 бит)
Тупо простой, основанный на @joeld'ы ответ
class PrintInColor:
RED = '\033[91m'
GREEN = '\033[92m'
YELLOW = '\033[93m'
LIGHT_PURPLE = '\033[94m'
PURPLE = '\033[95m'
END = '\033[0m'
@classmethod
def red(cls, s, **kwargs):
print(cls.RED + s + cls.END, **kwargs)
@classmethod
def green(cls, s, **kwargs):
print(cls.GREEN + s + cls.END, **kwargs)
@classmethod
def yellow(cls, s, **kwargs):
print(cls.YELLOW + s + cls.END, **kwargs)
@classmethod
def lightPurple(cls, s, **kwargs):
print(cls.LIGHT_PURPLE + s + cls.END, **kwargs)
@classmethod
def purple(cls, s, **kwargs):
print(cls.PURPLE + s + cls.END, **kwargs)
Тогда просто
PrintInColor.red('hello', end=' ')
PrintInColor.green('world')
Я обернула @ответить joeld в модуль с глобальными функциями, которые я могу использовать в любом месте в моем коде.
файл: log.py
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = "\033[1m"
def disable():
HEADER = ''
OKBLUE = ''
OKGREEN = ''
WARNING = ''
FAIL = ''
ENDC = ''
def infog( msg):
print OKGREEN + msg + ENDC
def info( msg):
print OKBLUE + msg + ENDC
def warn( msg):
print WARNING + msg + ENDC
def err( msg):
print FAIL + msg + ENDC
использовать следующим образом:
import log
log.info("Hello World")
log.err("System Error")
Для Windows вы не можете печатать на консоль с цветами, если только вы не используете win32api.
В Linux для этого достаточно просто использовать print, используя управляющие последовательности, описанные здесь:
Чтобы символ печатался как рамка, все зависит от того, какой шрифт вы используете для окна консоли. Символ фунта работает хорошо, но это зависит от шрифта:
#
Я в конечном итоге делает это, я чувствовал, что это был чистый:
formatters = {
'RED': '\033[91m',
'GREEN': '\033[92m',
'END': '\033[0m',
}
print 'Master is currently {RED}red{END}!'.format(**formatters)
print 'Help make master {GREEN}green{END} again!'.format(**formatters)
Здание на @Ответить joeld, используя установки -у типуна https://pypi.python.org/pypi/lazyme lazyme
:
from lazyme.string import color_print
>>> color_print('abc')
abc
>>> color_print('abc', color='pink')
abc
>>> color_print('abc', color='red')
abc
>>> color_print('abc', color='yellow')
abc
>>> color_print('abc', color='green')
abc
>>> color_print('abc', color='blue', underline=True)
abc
>>> color_print('abc', color='blue', underline=True, bold=True)
abc
>>> color_print('abc', color='pink', underline=True, bold=True)
abc
Скриншот:
Некоторые обновления color_print
новые форматеры, например:
>>> from lazyme.string import palette, highlighter, formatter
>>> from lazyme.string import color_print
>>> palette.keys() # Available colors.
['pink', 'yellow', 'cyan', 'magenta', 'blue', 'gray', 'default', 'black', 'green', 'white', 'red']
>>> highlighter.keys() # Available highlights.
['blue', 'pink', 'gray', 'black', 'yellow', 'cyan', 'green', 'magenta', 'white', 'red']
>>> formatter.keys() # Available formatter,
['hide', 'bold', 'italic', 'default', 'fast_blinking', 'faint', 'strikethrough', 'underline', 'blinking', 'reverse']
Примечание: курсив
, быстро мигает
и зачеркнуто
может не работать на всех терминалах, не'т работать на Mac и Ubuntu.
Е. Г.
>>> color_print('foo bar', color='pink', highlight='white')
foo bar
>>> color_print('foo bar', color='pink', highlight='white', reverse=True)
foo bar
>>> color_print('foo bar', color='pink', highlight='white', bold=True)
foo bar
>>> color_print('foo bar', color='pink', highlight='white', faint=True)
foo bar
>>> color_print('foo bar', color='pink', highlight='white', faint=True, reverse=True)
foo bar
>>> color_print('foo bar', color='pink', highlight='white', underline=True, reverse=True)
foo bar
Скриншот:
обратите внимание, насколько хорошо с
ключевое слово смесей с модификаторами, как эти, которые нужно будет сбросить (с помощью Python 3 и лак):
from colorama import Fore, Style
import sys
class Highlight:
def __init__(self, clazz, color):
self.color = color
self.clazz = clazz
def __enter__(self):
print(self.color, end="")
def __exit__(self, type, value, traceback):
if self.clazz == Fore:
print(Fore.RESET, end="")
else:
assert self.clazz == Style
print(Style.RESET_ALL, end="")
sys.stdout.flush()
with Highlight(Fore, Fore.GREEN):
print("this is highlighted")
print("this is not")
Вы можете использовать Клинта:
from clint.textui import colored
print colored.red('some warning message')
print colored.green('nicely done!')
Вы можете использовать реализацию библиотеки curses на языке Python: http://docs.python.org/library/curses.html
Также запустите это, и вы'найдете свою коробку:
for i in range(255):
print i, chr(i)