npyscreen - tutorial curses python
Cómo utilizar la paleta de colores de terminal con curses. (5)
Actualmente pongo estas líneas delante de mi guión.
curses.use_default_colors()
for i in range(0, curses.COLORS):
curses.init_pair(i, i, -1);
No sé si es la mejor solución, pero al menos produce algunos pares de colores que son consistentes con la paleta de colores del terminal.
No consigo que la paleta de colores del terminal funcione con curses.
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)
Esta secuencia de comandos de Python muestra la siguiente pantalla:
Sin embargo, tengo más colores en mi paleta gnome-terminal. ¿Cómo puedo acceder a ellos dentro de las maldiciones?
La aplicación de terminal establece la "paleta de colores" del terminal para asignar colores de curses predeterminados a "interpretaciones" específicas de la aplicación. Si usa rojo, el terminal puede elegir mostrarlo como rojo burdeos o rojo cereza, o si el usuario lo desea, algo completamente diferente.
En otras palabras, solo use los colores de curses (combinados con o sin los modificadores de brillo o parpadeo) y las cosas deberían funcionar.
Creo que la llamada curses.use_default_colors()
simplemente hace que la transparencia esté disponible; es una llamada directa a la función de la API ncurses use_default_colors()
. los colores de ncurses son de otra manera basados en la paleta; debe configurar sus propios atributos de color por número de par con las llamadas curses.init_pair()
, luego seleccione un par de colores con curses.color_pair()
en la paleta para mostrar el texto con ese par específico; o construir atributos de texto directamente para una llamada addstr()
dada.
Lo siguiente lo descubrí por experimento en mi propia PC (Ubuntu 14.04, python 3).
- Hay 256 colores (definidos por los primeros 8 bits).
- Los otros bits se utilizan para atributos adicionales, como el resaltado.
- Al pasar el número -1, el color vuelve a los colores de fondo y de primer plano predeterminados.
- El par de colores 0 (mod 256) se fija en (-1, -1).
- Los colores del 0 al 15 son los colores de la paleta terminal.
Considere el siguiente código de prueba. Agrega esto a tu .bashrc
:
# Set proper $TERM if we are running gnome-terminal
if [ "$COLORTERM" == "gnome-terminal" ]
then
TERM=xterm-256color
fi
Pon esto en un archivo python y ejecútalo.
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)
Ejecutarlo dará el siguiente resultado.
Como puede ver, los pares de colores 1-16 son la paleta de colores de terminal para los colores de primer plano.
No tengo los puntos de respuesta para enviar esto como un comentario a la excelente respuesta de Chiel ten Brinke, por lo que ofreceré aquí una versión más útil de su script de color:
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)
Puedes usar el paquete culour
instalando con:
pip install culour
Y luego puedes usarlo para imprimir con color a curses:
culour.addstr(window, "colored string")