Comment puis-je sortir du texte en couleur sur le terminal, en Python? Quel est le meilleur symbole Unicode pour représenter un bloc solide?
python
unicode
terminal
ansi-colors
aboSamoor
la source
la source
█
seul problème est qu'il est étendu en ASCII, peut-être pourriez-vous le faire fonctionner en utilisanthttp://stackoverflow.com/questions/8465226/using-extended-ascii-codes-with-python
Réponses:
Cela dépend quelque peu de la plateforme sur laquelle vous vous trouvez. La façon la plus courante de procéder consiste à imprimer des séquences d'échappement ANSI. Pour un exemple simple, voici du code python des scripts de construction de blender :
Pour utiliser un code comme celui-ci, vous pouvez faire quelque chose comme
ou, avec Python3.6 +:
Cela fonctionnera sur unix, y compris OS X, Linux et Windows (à condition que vous utilisiez ANSICON , ou dans Windows 10 à condition d'activer l' émulation VT100 ). Il existe des codes ansi pour définir la couleur, déplacer le curseur, etc.
Si vous allez devenir compliqué avec cela (et il semble que vous le soyez si vous écrivez un jeu), vous devriez regarder dans le module "curses", qui gère une grande partie des parties compliquées de cela pour vous. Le Python Curses HowTO est une bonne introduction.
Si vous n'utilisez pas ASCII étendu (c'est-à-dire pas sur un PC), vous êtes coincé avec les caractères ascii en dessous de 127, et '#' ou '@' est probablement votre meilleur pari pour un bloc. Si vous pouvez vous assurer que votre terminal utilise un jeu de caractères ASCII étendu IBM , vous disposez de nombreuses autres options. Les caractères 176, 177, 178 et 219 sont les "caractères de bloc".
Certains programmes modernes basés sur du texte, tels que "Dwarf Fortress", émulent le mode texte en mode graphique et utilisent des images de la police PC classique. Vous pouvez trouver certains de ces bitmaps que vous pouvez utiliser sur le Wiki Dwarf Fortress voir (ensembles de tuiles créés par l'utilisateur ).
Le concours de démonstration en mode texte a plus de ressources pour faire des graphiques en mode texte.
Hmm .. Je pense que je me suis un peu laissé emporter par cette réponse. Je suis en train de planifier un jeu d'aventure épique basé sur du texte. Bonne chance avec ton texte en couleur!
la source
tput
, comme cela, car il en résulte un code plus portable.disable
est lorsque vous dirigez la sortie vers un fichier; alors que des outils commecat
peuvent prendre en charge les couleurs, il est généralement préférable de ne pas imprimer les informations de couleur dans les fichiers.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)
.Je suis surpris que personne n'ait mentionné le module Python termcolor . L'utilisation est assez simple:
Ou en Python 3:
Cependant, il n'est peut-être pas assez sophistiqué pour la programmation de jeux et les "blocs de couleur" que vous voulez faire ...
la source
termcolor.COLORS
vous donne une liste de couleursos.system('color')
abord, puis les séquences d'échappement ANSI commencent à fonctionner.La réponse est Colorama pour toutes les couleurs multiplateformes en Python.
Un exemple de capture d'écran Python 3.6:
la source
<b>bold</b>
) pour ajouter du style au texte du terminalImprimez une chaîne qui commence une couleur / un style, puis la chaîne, puis terminez le changement de couleur / style avec
'\x1b[0m'
:Obtenez un tableau des options de format pour le texte shell avec le code suivant:
Exemple clair sur foncé (complet)
Exemple sombre sur lumière (partiel)
la source
Définissez une chaîne qui commence une couleur et une chaîne qui termine la couleur, puis imprimez votre texte avec la chaîne de début à l'avant et la chaîne de fin à la fin.
Cela produit les éléments suivants dans
bash
,urxvt
avec un jeu de couleurs de style Zenburn:Grâce à l'expérimentation, nous pouvons obtenir plus de couleurs:
Remarque:
\33[5m
et\33[6m
clignotent.De cette façon, nous pouvons créer une collection en couleur:
Voici le code pour générer le test:
la source
\33[0m
ouCEND
au - dessus.Vous souhaitez en savoir plus sur les séquences d'échappement ANSI. Voici un bref exemple:
Pour plus d'informations, voir http://en.wikipedia.org/wiki/ANSI_escape_code
Pour un caractère de bloc, essayez un caractère unicode comme \ u2588:
Mettre tous ensemble:
la source
def d(*v): return '\x1B['+';'.join(map(str, v))+'m'
alorsprint ' '.join([d(k,i)+str(i%10)+d(0) for i in range(30,38)+range(40,48) for k in range(2)])
Je réponds car j'ai trouvé un moyen d'utiliser les codes ANSI sur Windows 10, afin que vous puissiez changer la couleur du texte sans aucun module non intégré:
La ligne qui fait ce travail est
os.system("")
, ou tout autre appel système, qui vous permet d'imprimer des codes ANSI dans le terminal:Remarque: Bien que cela donne les mêmes options que les autres options de Windows, Windows ne prend pas complètement en charge les codes ANSI, même avec cette astuce. Toutes les couleurs de décoration de texte ne fonctionnent pas et toutes les couleurs `` lumineuses '' (codes 90-97 et 100-107) affichent la même chose que les couleurs normales (codes 30-37 et 40-47)
Edit : Merci à @jl d'avoir trouvé une méthode encore plus courte.
tl; dr : ajoutez en
os.system("")
haut de votre fichier.Version Python: 3.6.7
la source
if sys.platform.lower() == "win32": os.system('color')
encore plus en la remplaçant simplement par justeos.system('')
. Aucune condition n'est requise et le code s'exécute à la fois sous Windows 10 et Linux (lorsque je l'ai testé). Comme vous pouvez le voir, vous n'avez pas besoin d'appeler le systèmecolor
. Appelsdir
,cd
,abcdef
, et juste une amende de travail de chaîne vide (bien que les chaînes non vides seront imprimées probablement la sortie que vous ne voulez pas voir).Ma façon préférée est avec la bibliothèque Blessings (divulgation complète: je l'ai écrite). Par exemple:
Pour imprimer des briques colorées, le moyen le plus fiable consiste à imprimer des espaces avec des couleurs d'arrière-plan. J'utilise cette technique pour dessiner la barre de progression en nez progressif :
Vous pouvez également imprimer dans des emplacements spécifiques:
Si vous devez jouer avec d'autres capacités de terminal au cours de votre jeu, vous pouvez également le faire. Vous pouvez utiliser le formatage de chaîne standard de Python pour le garder lisible:
La bonne chose à propos de Blessings, c'est qu'il fait de son mieux pour travailler sur toutes sortes de terminaux, pas seulement ceux (extrêmement courants) de couleur ANSI. Il garde également les séquences d'échappement illisibles hors de votre code tout en restant concis à utiliser. S'amuser!
la source
getattr
si vous en avez besoin. Ou plus probablement, créez simplement la chaîne de format dynamiquement à la place.can just pass
une fonction python.sty est similaire à colorama, mais il est moins verbeux, prend en charge les couleurs 8 bits et 24 bits (rgb), vous permet d'enregistrer vos propres styles, prend en charge le muting, est vraiment flexible, bien documenté et plus encore.
Exemples:
impressions:
Démo:
la source
a généré une classe avec toutes les couleurs en utilisant une boucle for pour itérer chaque combinaison de couleurs jusqu'à 100, puis a écrit une classe avec des couleurs python. Copiez et collez comme vous voulez, GPLv2 par moi:
la source
Essayez ce code simple
la source
Sous Windows, vous pouvez utiliser le module 'win32console' (disponible dans certaines distributions Python) ou le module 'ctypes' (Python 2.5 et supérieur) pour accéder à l'API Win32.
Pour voir le code complet qui prend en charge les deux façons, consultez le code de rapport de la console couleur de Testoob .
exemple de ctypes:
la source
Incroyablement simple basé sur la réponse de @ joeld
Alors juste
la source
print
remplacements ? Objection annulée.print
on devrait s'assurer de répliquer correctement sa fonctionnalité.def purple(cls, *args, **kwargs): print(cls.PURPLE, *args, cls.END, **kwargs)
</code>J'ai enveloppé la réponse @joeld dans un module avec des fonctions globales que je peux utiliser n'importe où dans mon code.
fichier: log.py
utiliser comme suit:
la source
Pour Windows, vous ne pouvez pas imprimer sur une console avec des couleurs, sauf si vous utilisez win32api.
Pour Linux, c'est aussi simple que d'utiliser print, avec les séquences d'échappement décrites ici:
Couleurs
Pour que le caractère s'imprime comme une boîte, cela dépend vraiment de la police que vous utilisez pour la fenêtre de la console. Le symbole dièse fonctionne bien, mais cela dépend de la police:
la source
la source
J'ai fini par faire ça, j'ai senti que c'était le plus propre:
la source
En s'appuyant sur la réponse @joeld, en utilisant https://pypi.python.org/pypi/lazyme
pip install -U lazyme
:Capture d'écran:
Quelques mises à jour du
color_print
avec de nouveaux formateurs, par exemple:Note:
italic
,fast blinking
etstrikethrough
peut ne pas fonctionner sur tous les terminaux, ne fonctionne pas sur Mac / Ubuntu.Par exemple
Capture d'écran:
la source
Essayez en ligne
la source
notez à quel point le
with
mot - clé se mélange avec des modificateurs comme ceux-ci qui doivent être réinitialisés (en utilisant Python 3 et Colorama):la source
print(Style.BRIGHT + "Header Test")
etprint (Style.DIM + word)
pour créer une très belle invite.contextlib
Py3.@contextlib.contextmanager
décorateur dessus, non?Vous pouvez utiliser l'implémentation Python de la bibliothèque curses: http://docs.python.org/library/curses.html
Exécutez également ceci et vous trouverez votre boîte:
la source
Vous pouvez utiliser CLINT:
Obtenez-le de GitHub .
la source
Je sais que je suis en retard. Mais j'ai une bibliothèque appelée ColorIt . C'est super simple.
Voici quelques exemples:
Cela vous donne:
Il convient également de noter qu'il s'agit d'une plateforme multiplateforme et a été testé sur mac, linux et windows.
Vous voudrez peut-être l'essayer: https://github.com/CodeForeverAndEver/ColorIt
Remarque: Clignotant, italique, gras, etc. sera ajouté dans quelques jours.
la source
Si vous programmez un jeu, vous souhaitez peut-être changer la couleur d'arrière-plan et utiliser uniquement des espaces? Par exemple:
la source
Si vous utilisez Windows, alors c'est parti!
la source
print("%X --> %s" % (color, "Have a fine day!"), end='', flush=True)
Si vous utilisez Django
instantané:
(J'utilise généralement une sortie colorée pour le débogage sur le terminal runserver, je l'ai donc ajoutée.)
Vous pouvez tester s'il est installé sur votre machine:
$ python -c "import django; print django.VERSION"
Pour l'installer, vérifiez: Comment installer Django
Essaie!!
la source
Voici un exemple de malédictions:
la source
https://raw.github.com/fabric/fabric/master/fabric/colors.py
la source
asciimatics fournit un support portable pour la construction d'interfaces texte et d'animations:
Asciicast:
la source
Encore un autre module pypi qui encapsule la fonction d'impression python 3:
https://pypi.python.org/pypi/colorprint
Il est utilisable en python 2.x si vous aussi
from __future__ import print
. Voici un exemple de python 2 de la page pypi des modules:Sorties "Bonjour, monde!" avec les mots en bleu et le point d'exclamation en gras rouge et clignotant.
la source