Frage Im Terminal mit Farben drucken?


Wie kann ich in Python farbigen Text an das Terminal ausgeben? Was ist das beste Unicode-Symbol für einen soliden Block?


1515
2017-11-13 18:58


Ursprung


Antworten:


Dies hängt davon ab, auf welcher Plattform Sie sich befinden. Die gebräuchlichste Methode ist das Drucken von ANSI-Escape-Sequenzen. Für ein einfaches Beispiel, hier ist etwas Python-Code von der Blender Build-Skripte:

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'

Um Code wie diesen zu verwenden, können Sie etwas wie tun

print bcolors.WARNING + "Warning: No active frommets remain. Continue?" 
      + bcolors.ENDC

Dies funktioniert mit Unixen, einschließlich OS X, Linux und Windows (sofern Sie diese verwenden) ANSICONoder in Windows 10 vorausgesetzt, Sie aktivieren VT100-Emulation). Es gibt ANSI-Codes zum Einstellen der Farbe, Bewegen des Cursors und mehr.

Wenn Sie damit kompliziert werden (und es klingt wie Sie sind, wenn Sie ein Spiel schreiben), sollten Sie in das Modul "Flüche" schauen, das viele der komplizierten Teile davon für Sie behandelt. Das Python Fluch Howto ist eine gute Einführung.

Wenn Sie kein erweitertes ASCII verwenden (d. H. Nicht auf einem PC), stecken Sie mit den ASCII-Zeichen unter 127 fest, und "#" oder "@" ist wahrscheinlich die beste Option für einen Block. Wenn Sie sicherstellen können, dass Ihr Terminal eine IBM verwendet erweiterter ASCII-ZeichensatzDu hast viele weitere Optionen. Die Zeichen 176, 177, 178 und 219 sind die "Blockzeichen".

Einige moderne textbasierte Programme wie "Dwarf Fortress" emulieren den Textmodus in einem grafischen Modus und verwenden Bilder der klassischen PC-Schriftart. Sie können einige dieser Bitmaps finden, die Sie auf dem verwenden können Zwergenfestung Wiki sehen (benutzerdefinierte Tilesets).

Das Textmodus-Demo-Wettbewerb hat mehr Ressourcen für Grafiken im Textmodus.

Hmm .. Ich glaube, diese Antwort hat mich ein wenig mitreißen lassen. Ich bin gerade dabei, ein episches textbasiertes Abenteuerspiel zu planen. Viel Glück mit Ihrem farbigen Text!


1340
2017-11-13 19:25



Ich bin überrascht, dass niemand das erwähnt hat Python-Termcolor-Modul. Die Verwendung ist ziemlich einfach:

from termcolor import colored

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

Für die Programmierung von Spielen und die "farbigen Blöcke", die Sie machen möchten, ist es jedoch nicht ausgereift ...


553
2017-11-16 07:31



Die Antwort ist Colorama für alle plattformübergreifenden Kolorierungen in Python.

Ein Python 3.6 Beispiel Screenshot: example screenshot


477
2017-07-26 07:07



Drucken Sie eine Zeichenkette, die eine Farbe / einen Stil beginnt, dann die Zeichenkette und beenden Sie dann die Farb- / Stiländerung mit '\x1b[0m':

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

Success with green background example

Eine Tabelle mit Formatoptionen für Shell-Text mit folgendem Code abrufen:

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

Hell-Dunkel-Beispiel (komplett)

enter image description here

Dunkel-auf-Licht-Beispiel (teilweise)

top part of output


280
2018-02-14 17:56



Sie möchten etwas über ANSI-Escape-Sequenzen erfahren. Hier ist ein kurzes Beispiel:

CSI="\x1B["
print CSI+"31;40m" + "Colored Text" + CSI + "0m"

Für weitere Informationen siehe http://en.wikipedia.org/wiki/ANSI_escape_code

Versuchen Sie für ein Blockzeichen ein Unicode-Zeichen wie \ u2588:

print u"\u2588"

Alles zusammenfügen:

print CSI+"31;40m" + u"\u2588" + CSI + "0m"

71
2017-11-13 19:22



Definieren Sie eine Zeichenfolge, die eine Farbe beginnt, und eine Zeichenfolge, die die Farbe beendet, und drucken Sie dann Ihren Text mit der Anfangs- und der Endzeichenfolge am Ende.

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

Dies ergibt Folgendes in bash, im urxvtmit einem Zenzburn-Stil Farbschema:

output colors

Durch Experemintation können wir mehr Farben bekommen:

color matrix

Hinweis: \33[5m und \33[6m blinken.

Auf diese Weise können wir eine vollständige Farbsammlung erstellen:

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'

Hier ist der Code, um den Test zu generieren:

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

65
2017-09-12 14:00



Mein Lieblingsweg ist mit dem Segen Bibliothek (vollständige Offenlegung: Ich schrieb es). Beispielsweise:

from blessings import Terminal

t = Terminal()
print t.red('This is red.')
print t.bold_bright_red_on_black('Bright red on black')

Um farbige Steine ​​zu drucken, ist der zuverlässigste Weg, Räume mit Hintergrundfarben zu drucken. Ich benutze diese Technik, um den Fortschrittsbalken zu zeichnen Nase-progressiv:

print t.on_green(' ')

Sie können auch an bestimmten Orten drucken:

with t.location(0, 5):
    print t.on_yellow(' ')

Wenn Sie im Laufe Ihres Spiels mit anderen Terminalfähigkeiten herumspielen müssen, können Sie das auch tun. Sie können die Standardzeichenfolgenformatierung von Python verwenden, um sie lesbar zu halten:

print '{t.clear_eol}You just cleared a {t.bold}whole{t.normal} line!'.format(t=t)

Das Schöne an Blessings ist, dass es sein Bestes gibt, an allen Arten von Terminals zu arbeiten, nicht nur an den (überwiegend üblichen) ANSI-Farben. Es hält auch unlesbare Escape-Sequenzen aus Ihrem Code heraus, während es übersichtlich bleibt. Habe Spaß!


59
2017-12-18 00:32