Jak mogę wydrukować kolorowy tekst na terminalu w Pythonie? Jaki jest najlepszy symbol Unicode reprezentujący bryłę?
python
unicode
terminal
ansi-colors
aboSamoor
źródło
źródło
█
Jedynym problemem jest to, że jest on rozszerzony ASCII, być może mógłbyś go uruchomić za pomocąhttp://stackoverflow.com/questions/8465226/using-extended-ascii-codes-with-python
Odpowiedzi:
To nieco zależy od tego, na jakiej platformie jesteś. Najczęstszym sposobem na to jest wydrukowanie sekwencji ucieczki ANSI. Dla prostego przykładu oto kod Pythona ze skryptów kompilacji blendera :
Aby użyć takiego kodu, możesz zrobić coś takiego
lub z Python3.6 +:
Będzie to działać na systemach uniksowych, w tym OS X, Linux i Windows (pod warunkiem, że używasz ANSICON lub w Windows 10, pod warunkiem, że włączysz emulację VT100 ). Istnieją kody ansi do ustawiania koloru, przesuwania kursora i nie tylko.
Jeśli zamierzasz się z tym komplikować (i brzmi to tak, jakbyś pisał grę), powinieneś zajrzeć do modułu „przekleństwa”, który obsługuje dla ciebie wiele skomplikowanych części. Python Przekleństwa HOWTO jest dobrym wstępem.
Jeśli nie używasz rozszerzonego ASCII (tj. Nie na PC), utkniesz z postaciami ascii poniżej 127, a „#” lub „@” jest prawdopodobnie najlepszym wyborem dla bloku. Jeśli możesz upewnić się, że twój terminal używa rozszerzonego zestawu znaków ascii IBM , masz o wiele więcej opcji. Znaki 176, 177, 178 i 219 są „znakami blokowymi”.
Niektóre nowoczesne programy tekstowe, takie jak „Dwarf Fortress”, emulują tryb tekstowy w trybie graficznym i wykorzystują obrazy klasycznej czcionki PC. Niektóre z tych bitmap, których możesz użyć na Dwarf Fortress Wiki, patrz ( zestawy klocków wykonane przez użytkownika ).
Tekst Tryb Demo Konkurs ma więcej środków na ten grafiki w trybie tekstowym.
Hmm .. Myślę, że trochę poniosło mnie to pytanie. Jestem jednak w trakcie planowania epickiej gry przygodowej opartej na tekście. Powodzenia z kolorowym tekstem!
źródło
tput
, jak tak , ponieważ skutkuje bardziej przenośnego kodu.disable
jest przesyłanie danych wyjściowych do pliku; chociaż narzędzia takiecat
mogą obsługiwać kolory, ogólnie lepiej nie drukować informacji o kolorach w plikach.import ctypes;
kernel32 = ctypes.WinDLL('kernel32');
hStdOut = kernel32.GetStdHandle(-11);
mode = ctypes.c_ulong();
kernel32.GetConsoleMode(hStdOut, ctypes.byref(mode));
mode.value |= 4;
kernel32.SetConsoleMode(hStdOut, mode)
.Dziwię się, że nikt nie wspomniał o module termcolor Pythona . Użycie jest dość proste:
Lub w Python 3:
Jednak może nie być wystarczająco wyrafinowany do programowania gier i „kolorowych bloków”, które chcesz zrobić ...
źródło
termcolor.COLORS
daje listę kolorówos.system('color')
najpierw uruchom , a następnie sekwencje specjalne ANSI zaczynają działać.Odpowiedzią jest Colorama na wszystkie kolorowanki międzyplatformowe w Pythonie.
Przykładowy zrzut ekranu w języku Python 3.6:
źródło
<b>bold</b>
) Do dodawania stylu do tekstu terminalaWydrukuj ciąg, który rozpoczyna kolor / styl, następnie ciąg, a następnie zakończ zmianę koloru / stylu za pomocą
'\x1b[0m'
:Uzyskaj tabelę opcji formatowania tekstu powłoki z następującym kodem:
Przykład jasności na ciemności (kompletny)
Przykład ciemnego światła (częściowy)
źródło
Zdefiniuj ciąg rozpoczynający kolor i ciąg kończący kolor, a następnie wydrukuj tekst z ciągiem początkowym na początku i końcowym na końcu.
Powoduje to
bash
, że wurxvt
schemacie kolorów w stylu Zenburn:Dzięki eksperymentom możemy uzyskać więcej kolorów:
Uwaga:
\33[5m
i\33[6m
migają.W ten sposób możemy stworzyć pełną kolekcję kolorów:
Oto kod do wygenerowania testu:
źródło
\33[0m
lubCEND
wyżej.Chcesz poznać sekwencje specjalne ANSI. Oto krótki przykład:
Aby uzyskać więcej informacji, zobacz http://en.wikipedia.org/wiki/ANSI_escape_code
W przypadku znaku bloku wypróbuj znak Unicode, taki jak \ u2588:
Kładąc wszystko razem:
źródło
def d(*v): return '\x1B['+';'.join(map(str, v))+'m'
więcprint ' '.join([d(k,i)+str(i%10)+d(0) for i in range(30,38)+range(40,48) for k in range(2)])
Odpowiadam, ponieważ znalazłem sposób korzystania z kodów ANSI w systemie Windows 10, dzięki czemu możesz zmienić kolor tekstu bez żadnych modułów, które nie są wbudowane:
Linia, która sprawia, że to działa
os.system("")
, lub dowolne inne wywołanie systemowe, które pozwala wydrukować kody ANSI w terminalu:Uwaga: Chociaż daje to te same opcje, co inne opcje systemu Windows, system Windows nie obsługuje w pełni kodów ANSI, nawet przy tej sztuczce. Nie wszystkie kolory dekoracji tekstu działają, a wszystkie „jasne” kolory (kody 90–97 i 100–107) wyświetlają się tak samo jak zwykłe kolory (kody 30–37 i 40–47)
Edycja : Dzięki @jl za znalezienie jeszcze krótszej metody.
tl; dr : Dodaj
os.system("")
w górnej części pliku.Wersja Python: 3.6.7
źródło
if sys.platform.lower() == "win32": os.system('color')
jeszcze bardziej, po prostu zastępując ją justos.system('')
. Nie jest wymagany żaden warunek, a kod działa zarówno w systemie Windows 10, jak i Linux (kiedy go testowałem). Jak widać, nie musisz wykonywać połączenia systemowego zcolor
. Domaga siędir
,cd
,abcdef
, i po prostu pusta porządku praca string (chociaż niepuste ciągi najprawdopodobniej wydrukować wyjście nie chcesz, aby zobaczyć).Moim ulubionym sposobem jest biblioteka Blessings (pełne ujawnienie: napisałem to). Na przykład:
Aby wydrukować kolorowe cegły, najbardziej niezawodnym sposobem jest wydrukowanie przestrzeni w kolorach tła. Używam tej techniki do rysowania paska postępu progresywnie :
Możesz również drukować w określonych lokalizacjach:
Jeśli w trakcie gry będziesz musiał zmarnować inne możliwości terminalu, możesz to zrobić. Możesz użyć standardowego formatowania napisów w Pythonie, aby zachować jego czytelność:
Zaletą Blessings jest to, że najlepiej działa na wszelkiego rodzaju terminalach, nie tylko na (przeważnie powszechnych) kolorach ANSI. Utrzymuje również nieczytelne sekwencje specjalne poza twoim kodem, pozostając jednocześnie zwięzłym w użyciu. Baw się dobrze!
źródło
getattr
jeśli potrzebujesz. Lub bardziej prawdopodobne, po prostu dynamicznie utwórz ciąg formatu.can just pass
funkcją python.sty jest podobny do colorama, ale jest mniej gadatliwy, obsługuje kolory 8bit i 24bit (rgb), pozwala zarejestrować własne style, obsługuje wyciszanie, jest naprawdę elastyczny, dobrze udokumentowany i więcej.
Przykłady:
drukuje:
Próbny:
źródło
wygenerował klasę ze wszystkimi kolorami za pomocą pętli for, aby iterować każdą kombinację kolorów do 100, a następnie napisał klasę z kolorami python. Skopiuj i wklej, jak chcesz, GPLv2 przeze mnie:
źródło
Wypróbuj ten prosty kod
źródło
W systemie Windows można użyć modułu „win32console” (dostępnego w niektórych dystrybucjach Pythona) lub modułu „ctypes” (Python 2.5 i nowsze), aby uzyskać dostęp do Win32 API.
Aby zobaczyć pełny kod, który obsługuje oba sposoby, zobacz kod raportowania konsoli kolorów od Testoob .
przykład ctypes:
źródło
Głupio prosta w oparciu o odpowiedź @ joeld
Więc po prostu
źródło
print
-replacements ? Sprzeciw został odwołany.print
należy, należy upewnić się, że odpowiednio ją replikuje.def purple(cls, *args, **kwargs): print(cls.PURPLE, *args, cls.END, **kwargs)
</code>Zawarłem @joeld odpowiedź w module z funkcjami globalnymi, których mogę używać w dowolnym miejscu w kodzie.
plik: log.py
użyj w następujący sposób:
źródło
W systemie Windows nie można drukować na konsoli za pomocą kolorów, chyba że używasz win32api.
W przypadku Linuksa jest to tak proste, jak użycie print, z sekwencjami ucieczki opisanymi tutaj:
Zabarwienie
Aby postać drukowała się jak pudełko, tak naprawdę zależy od tego, jakiej czcionki używasz w oknie konsoli. Symbol funta działa dobrze, ale zależy to od czcionki:
źródło
źródło
Skończyło się na tym, czułem, że to było najczystsze:
źródło
Opierając się na odpowiedzi @joeld, używając https://pypi.python.org/pypi/lazyme
pip install -U lazyme
:Zrzut ekranu:
Niektóre aktualizacje
color_print
nowych formatów, np .:Uwaga:
italic
,fast blinking
astrikethrough
może nie działać na wszystkich terminalach, nie działa na Mac / Ubuntu.Na przykład
Zrzut ekranu:
źródło
Wypróbuj online
źródło
zwróć uwagę, jak dobrze
with
słowo kluczowe miesza się z takimi modyfikatorami, które muszą zostać zresetowane (przy użyciu Python 3 i Colorama):źródło
print(Style.BRIGHT + "Header Test")
iprint (Style.DIM + word)
stworzyłem naprawdę fajny monit.contextlib
Py3.@contextlib.contextmanager
dekoratora, nie?Możesz użyć implementacji biblioteki curses w języku Python: http://docs.python.org/library/curses.html
Uruchom także, a znajdziesz swoje pudełko:
źródło
Możesz użyć CLINT:
Pobierz z GitHub .
źródło
Wiem, że się spóźniłem. Ale mam bibliotekę o nazwie ColorIt . To jest bardzo proste.
Oto kilka przykładów:
To daje ci:
Warto również zauważyć, że jest to platforma wieloplatformowa i została przetestowana na systemach Mac, Linux i Windows.
Możesz spróbować: https://github.com/CodeForeverAndEver/ColorIt
Uwaga: miganie, kursywa, pogrubienie itp. Zostaną dodane za kilka dni.
źródło
Jeśli programujesz grę, być może chciałbyś zmienić kolor tła i używać tylko spacji? Na przykład:
źródło
Jeśli korzystasz z systemu Windows, proszę bardzo!
źródło
print("%X --> %s" % (color, "Have a fine day!"), end='', flush=True)
Jeśli używasz Django
migawka:
(Generalnie używam kolorowych wyników do debugowania na terminalu runserver, więc go dodałem).
Możesz przetestować, czy jest zainstalowany na twoim komputerze:
$ python -c "import django; print django.VERSION"
Aby zainstalować, sprawdź: Jak zainstalować Django
Spróbuj!!
źródło
Oto przykład przekleństwa:
źródło
https://raw.github.com/fabric/fabric/master/fabric/colors.py
źródło
asciimatics zapewnia przenośne wsparcie dla tworzenia tekstowego interfejsu użytkownika i animacji:
Asciicast:
źródło
Jeszcze inny moduł pypi, który otacza funkcję drukowania Python 3:
https://pypi.python.org/pypi/colorprint
Jest użyteczny w Pythonie 2.x, jeśli Ty również
from __future__ import print
. Oto przykład python 2 ze strony pypi modułów:Wyjścia „Witaj, świecie!” ze słowami w kolorze niebieskim i wykrzyknikiem pogrubionym czerwonym i migającym.
źródło