it-swarm.com.ru

Печать в терминале с цветами?

Как вывести цветной текст на терминал в Python? Какой символ Unicode лучше всего представляет сплошной блок?

1683
aboSamoor

Это зависит от того, на какой платформе вы находитесь. Наиболее распространенный способ сделать это - распечатать escape-последовательности ANSI. Для простого примера, вот код на python из сценариев сборки blender :

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

Это будет работать на Unix, включая OS X, Linux и Windows (при условии, что вы используете ANSICON , или в Windows 10, если вы включаете эмуляцию VT100 ). Есть ANSI коды для установки цвета, перемещения курсора и многое другое.

Если вы собираетесь усложниться с этим (и это звучит так, как будто вы пишете игру), вы должны заглянуть в модуль «curses», который обрабатывает многие сложные части этого для вас. Python Curses HowTO - хорошее введение.

Если вы не используете расширенный ASCII (то есть не на ПК), вы застряли с символами ascii ниже 127, и «#» или «@», вероятно, является вашей лучшей ставкой для блока. Если вы можете убедиться, что ваш терминал использует набор символов IBM extended ascii , у вас есть еще много вариантов. Символы 176, 177, 178 и 219 являются «блочными персонажами».

Некоторые современные текстовые программы, такие как «Dwarf Fortress», эмулируют текстовый режим в графическом режиме и используют изображения классического шрифта для ПК. Вы можете найти некоторые из этих растровых изображений, которые вы можете использовать, на Dwarf Fortress Wiki , см. ( Плитки, сделанные пользователем ).

Конкурс демоверсий Text Mode имеет больше ресурсов для создания графики в текстовом режиме.

Хм .. Я думаю, что немного увлекся этим ответом. Хотя я планирую эпическую текстовую приключенческую игру. Удачи с вашим цветным текстом!

1473
joeld

Я удивлен, что никто не упомянул модуль Python termcolor . Использование довольно просто:

from termcolor import colored

print colored('hello', 'red'), colored('world', 'green')

Или в Python 3:

print(colored('hello', 'red'), colored('world', 'green'))

Однако он может быть недостаточно сложным для программирования игр и «цветных блоков», которые вы хотите сделать ...

630
Samat Jain

Ответ Colorama для всех кроссплатформенных раскрасок в Python.

Пример экрана Python 3.6:  example screenshot

545
priestc

Напечатайте строку, которая начинает цвет/стиль, затем строку, а затем завершите изменение цвета/стиля с помощью '\x1b[0m':

print('\x1b[6;30;42m' + 'Success!' + '\x1b[0m')

 Success with green background example

Получите таблицу параметров формата для текста Shell со следующим кодом:

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()

Пример «свет в темноте» (завершено)

 enter image description here

Пример темного света (частичный)

top part of output

329
rabin utam

Определите строку, начинающую цвет, и строку, оканчивающую цвет, затем напечатайте текст с начальной строкой впереди и конечной строкой в ​​конце.

CRED = '\033[91m'
CEND = '\033[0m'
print(CRED + "Error, does not compute!" + CEND)

Это приводит к следующему в bash, в urxvt с цветовой схемой в стиле Zenburn:

 output colors

Благодаря экспертизе мы можем получить больше цветов:

 color matrix

Примечание: \33[5m и \33[6m мигают.

Таким образом, мы можем создать полноцветную коллекцию:

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
112
qubodup

Вы хотите узнать о escape-последовательностях 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"
76
Bryan Oakley

Мой любимый путь - с Blessings library (полное раскрытие: я написал это). Например:

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)

Приятная особенность Blessings заключается в том, что он старается работать со всеми типами терминалов, а не только с (в подавляющем большинстве распространенными) ANSI-цветами. Он также сохраняет не читаемые escape-последовательности в вашем коде, оставаясь при этом лаконичным в использовании. Повеселись!

58
Erik Rose

сгенерировал класс со всеми цветами, используя цикл 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'
46
GI Jack

Попробуйте этот простой код 

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")
40
dayitv89

sty похож на colorama, но он менее подробный, поддерживает 8bit и 24bit (rgb) цвета, позволяет вам регистрировать собственные цвета, действительно гибок и хорошо документирован.

from sty import fg, bg, ef, rs, RgbFg

foo = fg.red + 'This is red text!' + fg.rs
bar = bg.blue + 'This has a blue background!' + bg.rs
baz = ef.italic + 'This is italic text' + rs.italic
qux = fg(201) + 'This is pink text using 8bit colors' + fg.rs
qui = fg(255, 10, 10) + 'This is red text using 24bit colors.' + fg.rs

# Add new colors:

fg.set_style('orange', RgbFg(255, 150, 50))

buf = fg.orange + 'Yay, Im orange.' + fg.rs

print(foo, bar, baz, qux, qui, buf, sep='\n')

печатает:

 enter image description here

Демо: enter image description here

29
Rotareti

В Windows вы можете использовать модуль 'win32console' (доступный в некоторых дистрибутивах Python) или модуль 'ctypes' (Python 2.5 и выше) для доступа к Win32 API.

Чтобы увидеть полный код, который поддерживает оба способа, см. код отчетности консоли цвета из Testoob .

пример ctypes:

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)
26
orip

Тупо просто, основываясь на ответе @ 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')
22
zahanm

Я обернул ответ @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")
20
Mohamed Samy

Опираясь на ответ @joeld, используя https://pypi.python.org/pypi/lazymepip install -U 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

Скриншот:

 enter image description here


Некоторые обновления 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']

Примечание: italic, fast blinking и strikethrough могут работать не на всех терминалах, не работают на 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

Скриншот:

 enter image description here

18
alvas

Для Windows вы не можете печатать на консоли с цветами, если вы не используете win32api.

Для Linux это так же просто, как использовать print, с escape-последовательностями, описанными здесь:

Цвета

Для того, чтобы символ печатался как коробка, он действительно зависит от того, какой шрифт вы используете для окна консоли. Символ фунта работает хорошо, но это зависит от шрифта:

#
18
UberJumper

Я закончил тем, что делал это, я чувствовал, что это было самым чистым: 

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)
16
Ben174

Вы можете использовать Python-реализацию библиотеки curses: http://docs.python.org/library/curses.html

Кроме того, запустите это, и вы найдете свой ящик:

for i in range(255):
    print i, chr(i)
16
daharon

Вы можете использовать CLINT:

from clint.textui import colored
print colored.red('some warning message')
print colored.green('nicely done!')

Получите это от GitHub .

15
Giacomo Lacava

обратите внимание, насколько хорошо ключевое слово with смешивается с такими модификаторами, которые необходимо сбросить (используя Python 3 и Colorama):

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")
15
Janus Troelsen

Если вы программируете игру, возможно, вы хотели бы изменить цвет фона и использовать только пробелы? Например:

print " "+ "\033[01;41m" + " " +"\033[01;46m"  + "  " + "\033[01;42m"
11
suhib-alsisan

asciimatics предоставляет портативную поддержку для создания текстового интерфейса и анимации:

#!/usr/bin/env python
from asciimatics.effects import RandomNoise  # $ pip install asciimatics
from asciimatics.renderers import SpeechBubble, Rainbow
from asciimatics.scene import Scene
from asciimatics.screen import Screen
from asciimatics.exceptions import ResizeScreenError


def demo(screen):
    render = Rainbow(screen, SpeechBubble('Rainbow'))
    effects = [RandomNoise(screen, signal=render)]
    screen.play([Scene(effects, -1)], stop_on_resize=True)

while True:
    try:
        Screen.wrapper(demo)
        break
    except ResizeScreenError:
        pass

Asciicast:

 Rainbow-colored text among ascii noise

10
jfs

Вот пример проклятия:

import curses

def main(stdscr):
    stdscr.clear()
    if curses.has_colors():
        for i in xrange(1, curses.COLORS):
            curses.init_pair(i, i, curses.COLOR_BLACK)
            stdscr.addstr("COLOR %d! " % i, curses.color_pair(i))
            stdscr.addstr("BOLD! ", curses.color_pair(i) | curses.A_BOLD)
            stdscr.addstr("STANDOUT! ", curses.color_pair(i) | curses.A_STANDOUT)
            stdscr.addstr("UNDERLINE! ", curses.color_pair(i) | curses.A_UNDERLINE)
            stdscr.addstr("BLINK! ", curses.color_pair(i) | curses.A_BLINK)
            stdscr.addstr("DIM! ", curses.color_pair(i) | curses.A_DIM)
            stdscr.addstr("REVERSE! ", curses.color_pair(i) | curses.A_REVERSE)
    stdscr.refresh()
    stdscr.getch()

if __== '__main__':
    print "init..."
    curses.wrapper(main)
9
nosklo

https://raw.github.com/fabric/fabric/master/fabric/colors.py

"""
.. versionadded:: 0.9.2

Functions for wrapping strings in ANSI color codes.

Each function within this module returns the input string ``text``, wrapped
with ANSI color codes for the appropriate color.

For example, to print some text as green on supporting terminals::

    from fabric.colors import green

    print(green("This text is green!"))

Because these functions simply return modified strings, you can nest them::

    from fabric.colors import red, green

    print(red("This sentence is red, except for " + \
          green("these words, which are green") + "."))

If ``bold`` is set to ``True``, the ANSI flag for bolding will be flipped on
for that particular invocation, which usually shows up as a bold or brighter
version of the original color on most terminals.
"""


def _wrap_with(code):

    def inner(text, bold=False):
        c = code
        if bold:
            c = "1;%s" % c
        return "\033[%sm%s\033[0m" % (c, text)
    return inner

red = _wrap_with('31')
green = _wrap_with('32')
yellow = _wrap_with('33')
blue = _wrap_with('34')
Magenta = _wrap_with('35')
cyan = _wrap_with('36')
white = _wrap_with('37')
9
Vishal

Еще один модуль pypi, который включает в себя функцию печати python 3:

https://pypi.python.org/pypi/colorprint

Это можно использовать в Python 2.x, если вы также from __future__ import print. Вот пример Python 2 со страницы модулей Pypi:

from __future__ import print_function
from colorprint import *

print('Hello', 'world', color='blue', end='', sep=', ')
print('!', color='red', format=['bold', 'blink'])

Выходы "Привет, мир!" со словами в синем и восклицательным знаком, выделенным красным и мигающим.

9
drevicko

Если вы используете Windows, то здесь вы идете!

# display text on a Windows console
# Windows XP with Python27 or Python32
from ctypes import windll
# needed for Python2/Python3 diff
try:
    input = raw_input
except:
    pass
STD_OUTPUT_HANDLE = -11
stdout_handle = windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
# look at the output and select the color you want
# for instance hex E is yellow on black
# hex 1E is yellow on blue
# hex 2E is yellow on green and so on
for color in range(0, 75):
     windll.kernel32.SetConsoleTextAttribute(stdout_handle, color)
     print("%X --> %s" % (color, "Have a fine day!"))
     input("Press Enter to go on ... ")
9
Navweb

УРА! другая версия

пока я нахожу это ответ полезным, я немного его изменил. это Github Gist это результат

использование

print colors.draw("i'm yellow", bold=True, fg_yellow=True)

enter image description here

кроме того, вы можете обернуть обычные использования:

print colors.error('sorry, ')

asd

https://Gist.github.com/Jossef/0ee20314577925b4027f

9
Jossef Harush

Если вы используете Django

>>> from Django.utils.termcolors import colorize
>>> print colorize("Hello World!", fg="blue", bg='red',
...                 opts=('bold', 'blink', 'underscore',))
Hello World!
>>> help(colorize)

снимок:

image

(Я обычно использую цветной вывод для отладки на терминале runserver, поэтому я добавил его.)

Вы можете проверить, установлен ли он на вашем компьютере:
$ python -c "import Django; print Django.VERSION"
Для его установки проверьте: Как установить Django

Попробуйте!

7
Grijesh Chauhan

Одним из более простых вариантов будет использование функции cprint из пакета termcolor.

 color-print-python

Он также поддерживает %s, %d формат печати

 enter image description here

7
kmario23

Я отвечаю, потому что я нашел способ использовать коды ANSI на окнах, чтобы вы могли изменить цвет текста без каких-либо модулей:

Строка, которая делает эту работу, os.system('color'), но чтобы вы не вызывали ошибок, если человек не в Windows, вы можете использовать этот скрипт:

import os, sys

if sys.platform.lower() == "win32":
    os.system('color')

# Group of Different functions for different styles
class style():
    BLACK = lambda x: '\033[30m' + str(x)
    RED = lambda x: '\033[31m' + str(x)
    GREEN = lambda x: '\033[32m' + str(x)
    YELLOW = lambda x: '\033[33m' + str(x)
    BLUE = lambda x: '\033[34m' + str(x)
    Magenta = lambda x: '\033[35m' + str(x)
    CYAN = lambda x: '\033[36m' + str(x)
    WHITE = lambda x: '\033[37m' + str(x)
    UNDERLINE = lambda x: '\033[4m' + str(x)
    RESET = lambda x: '\033[0m' + str(x)

print(style.YELLOW("Hello, ") + style.RESET("World!"))

Версия Python: 3.6.7 (32 бит)

7
SimpleBinary
# Pure Python 3.x demo, 256 colors
# Works with bash under Linux

fg = lambda text, color: "\33[38;5;" + str(color) + "m" + text + "\33[0m"
bg = lambda text, color: "\33[48;5;" + str(color) + "m" + text + "\33[0m"

def print_six(row, format):
    for col in range(6):
        color = row*6 + col + 4
        if color>=0:
            text = "{:3d}".format(color)
            print (format(text,color), end=" ")
        else:
            print("   ", end=" ")

for row in range(-1,42):
    print_six(row, fg)
    print("",end=" ")
    print_six(row, bg)
    print()

Text with altering foreground and background, colors 0..141 Text with altering foreground and background, colors 142..255

6
Andriy Makukha

Я написал модуль, который обрабатывает цвета в Linux/OSX/Windows. Он поддерживает все 16 цветов на всех платформах, вы можете устанавливать цвета переднего плана и фона в разное время, а строковые объекты дают нормальные результаты для таких вещей, как len () и .capitalize ().

https://github.com/Robpol86/colorclass

example on Windows cmd.exe

3
Robpol86

Для персонажей

В вашем терминале, скорее всего, используются символы Unicode (обычно в кодировке UTF-8), поэтому выбор нужного шрифта зависит только от выбора подходящего шрифта. Unicode char U + 2588, «Полный блок» - это тот, который я бы предложил вам использовать.

Попробуйте следующее:

import unicodedata
fp= open("character_list", "w")
for index in xrange(65536):
    char= unichr(index)
    try: its_name= unicodedata.name(char)
    except ValueError: its_name= "N/A"
    fp.write("%05d %04x %s %s\n" % (index, index, char.encode("UTF-8"), its_name)
fp.close()

Изучите файл позже с вашим любимым зрителем.

Для цветов

curses это модуль, который вы хотите использовать. Проверьте это учебник .

3
tzot

Используйте pyfancy это простой способ сделать цвет в терминале!

Пример:

print(pyfancy.RED + "Hello Red" + pyfancy.END)
2
WebMaster

Я написал простой модуль, доступный по адресу: http://pypi.python.org/pypi/colorconsole

Он работает с Windows, Mac OS X и Linux . Он использует ANSI для Linux и Mac, но собственные вызовы функций консоли в Windows . У вас есть цвета, позиционирование курсора и ввод с клавиатуры. Он не заменяет проклятия, но может быть очень полезен, если вам нужно использовать простые сценарии или ASCII игры.

2
nmenezes

Вы можете использовать escape-символы Shell, доступные на любом языке . Эти escape-символы начинаются с символа ESC, за которым следует ряд аргументов.

Например, для вывода красной строки Hello world в ваш терминал:

echo "\e[31m Hello world \e[0m"

Или из скрипта Python:

print("\e[31m Hello world \e[0m")

Кроме того, я написал статью о Escape-последовательности , которая, вероятно, поможет вам лучше понять этот механизм. Я надеюсь, что это поможет вам.

1
Igor Šarčević

Чтобы решить эту проблему, я создал простой пакет для печати строк с интерполированными цветовыми кодами, который называется icolor .

icolor включает две функции: cformat и cprint, каждая из которых принимает строку с подстроками, которые интерполируются для сопоставления с escape-последовательностями ANSI, например,.

from icolor import cformat # there is also cprint

cformat("This is #RED;a red string, partially with a #xBLUE;blue background")
'This is \x1b[31ma red string, partially with a \x1b[44mblue background\x1b[0m'

Включены все цвета ANSI (например, #RED;, #BLUE; и т.д.), А также #RESET;, #BOLD; и другие.

Цвета фона имеют префикс x, поэтому зеленый фон будет #xGREEN;.

Вы можете избежать # с ##.

Учитывая его простоту, лучшей документацией, вероятно, является сам код .

Это на PYPI , так что можно Sudo easy_install icolor.

0
Brian M. Hunt

Я noob в Python, и я взволнован каждый раз, когда я открываю темы, как эта. Но на этот раз (внезапно) я чувствую, что мне есть, что сказать. Тем более, что несколько минут назад я обнаружил WOW в Python (по крайней мере, для меня сейчас):

Context Managers

from contextlib import contextmanager
#   FORECOLOR
BLACKFC,REDFC,GREENFC,YELLOWFC,BLUEFC = '38;30m','38;31m','38;32m','38;33m','38;34m'
#   BACKGOUND
BLACKBG,REDBG,GREENBG,YELLOWBG,BLUEBG = '48;40m','48;41m','48;42m','48;43m','48;44m'

@contextmanager
def printESC(prefix, color, text):
  print("{prefix}{color}{text}".format(prefix=prefix, color=color, text=text), end='')
  yield
  print("{prefix}0m".format(prefix=prefix))

with printESC('\x1B[', REDFC, 'Colored Text'):
  pass

ПРИМЕР

или просто так:

#   FORECOLOR
BLACKFC,REDFC,GREENFC,YELLOWFC,BLUEFC = '38;30m','38;31m','38;32m','38;33m','38;34m'
#   BACKGOUND
BLACKBG,REDBG,GREENBG,YELLOWBG,BLUEBG = '48;40m','48;41m','48;42m','48;43m','48;44m'

def printESC(prefix, color, text):
  print("{prefix}{color}{text}".format(prefix=prefix, color=color, text=text), end='')
  print("{prefix}0m".format(prefix=prefix))

printESC('\x1B[', REDFC, 'Colored Text')
0
qpaycm

Мои два цента ( PyColorTerm ):

Правка:

Sudo apt-get install python-pip
pip install pycolorterm

Скрипт Python:

from pycolorterm import pycolorterm

with pycolorterm.pretty_output(pycolorterm.FG_GREEN) as out:
    out.write('Works OK!')

"работает хорошо!" показывает зеленым цветом.

0
Diego Navarro