Je ne parviens pas à faire fonctionner la palette de couleurs du terminal avec les malédictions.
import curses
def main(stdscr):
curses.use_default_colors()
for i in range(0,7):
stdscr.addstr("Hello", curses.color_pair(i))
stdscr.getch()
curses.wrapper(main)
Ce script python donne l'écran suivant:
Cependant, j'ai plus de couleurs dans ma palette gnome-terminal. Comment puis-je y accéder dans les curses?
Ce que j'ai compris par expérience sur mon propre PC (Ubuntu 14.04, python 3).
Considérez le code de test suivant. Ajoutez ceci à votre .bashrc
:
# Set proper $TERM if we are running gnome-terminal
if [ "$COLORTERM" == "gnome-terminal" ]
then
TERM=xterm-256color
fi
Mettez-le dans un fichier python et exécutez-le.
import curses
def main(stdscr):
curses.start_color()
curses.use_default_colors()
for i in range(0, curses.COLORS):
curses.init_pair(i + 1, i, -1)
try:
for i in range(0, 255):
stdscr.addstr(str(i), curses.color_pair(i))
except curses.ERR:
# End of screen reached
pass
stdscr.getch()
curses.wrapper(main)
Son exécution produira la sortie suivante.
Comme vous le voyez, les paires de couleurs 1 à 16 sont la palette de couleurs terminale pour les couleurs de premier plan.
La "palette de couleurs" du terminal est définie par l'application du terminal elle-même pour mapper les couleurs par défaut des curses aux "interprétations" spécifiques à l'application. Si vous utilisez du rouge, le terminal peut choisir de l'afficher en tant que bordeaux ou rouge cerise, ou si l'utilisateur le souhaite, quelque chose de complètement différent.
En d'autres termes, utilisez simplement les couleurs des malédictions (combinées avec ou sans les modificateurs lumineux ou clignotants) et les choses devraient fonctionner correctement.
Je crois que l'appel curses.use_default_colors()
rend simplement la transparence disponible; c'est un appel direct à la fonction use_default_colors()
ncurses API . Les couleurs ncurses sont par ailleurs basées sur une palette; vous devez définir vos propres attributs de couleur par numéro de paire avec curses.init_pair()
appels , puis sélectionnez une paire de couleurs avec curses.color_pair()
dans la palette pour afficher du texte avec cette paire spécifique; ou créer des attributs de texte directement pour un appel addstr()
donné.
Je mets actuellement ces lignes devant mon script.
curses.use_default_colors()
for i in range(0, curses.COLORS):
curses.init_pair(i, i, -1);
Je ne sais pas si c'est la meilleure solution, mais au moins cela donne des paires de couleurs qui sont cohérentes avec la palette de couleurs terminale.
Je n'ai pas les rep-points pour soumettre ceci comme un commentaire à l'excellente réponse de Chiel ten Brinke, donc je vais offrir ici une version plus utile de son script de couleur:
import curses
def main(stdscr):
curses.start_color()
curses.use_default_colors()
for i in range(0, curses.COLORS):
curses.init_pair(i + 1, i, -1)
stdscr.addstr(0, 0, '{0} colors available'.format(curses.COLORS))
maxy, maxx = stdscr.getmaxyx()
maxx = maxx - maxx % 5
x = 0
y = 1
try:
for i in range(0, curses.COLORS):
stdscr.addstr(y, x, '{0:5}'.format(i), curses.color_pair(i))
x = (x + 5) % maxx
if x == 0:
y += 1
except curses.ERR:
pass
stdscr.getch()
curses.wrapper(main)
Vous pouvez utiliser le package culour
en installant avec:
pip install culour
Et puis vous pouvez l'utiliser pour imprimer avec des couleurs aux malédictions:
culour.addstr(window, "colored string")