Terminal colorido no Python com colorama

Se você ainda está aprendendo a programar e já está entediado com as letras brancas e fundo preto do terminal, mas ainda não se sente pronto pra programar uma GUI, ou se você quer apenas acrescentar um certo auxílio visual ao seu programa CLI, seus problemas acabaram!

Hoje, vou falar sobre uma biblioteca muito simples e legal para Python chamada colorama, que serve para colorir o terminal. Essa biblioteca é interessante porque é multiplataforma, funcionando em máquinas rodando Linux, macOS e Windows.

Por outro lado, quando eu digo “simples”, eu quero dizer simples mesmo. O colorama nos permite apenas alterar a cor de fundo e das letras do terminal, e acrescentar alguns efeitos de estilo (letras “apagadas” ou “destacadas”). Se você precisa de mais funcionalidades, existem algumas outras opções um tanto mais complexas como a curses e blessings.

Em sistemas compatíveis com o POSIX (Linux, macOS, etc.), o colorama funciona basicamente atribuindo nomes fáceis de lembrar para às sequências de escape responsáveis por alterar a cor do terminal. Já no Windows, por baixo dos panos o colorama converte essas sequências de escape em chamadas de sistema para alterar o estado do terminal.

Primeiro, vamos instalar o colorama com o bom e velho pip. Abra seu terminal e digite:

pip3 install colorama

Agora, vamos ver um programinha de exemplo:

from colorama import Fore, Back, Style, init, deinit
init()
print(Fore.BLACK + Back.WHITE  + "Oláááá!")
deinit()

Você pode digitar esses comandos tanto no console interativo do Python quanto num arquivo para rodar depois. Se tudo deu certo, você deve ter visto a frase “Olááááá” escrita em preto com o fundo branco.

Ao iniciar e encerrar o programa, ativamos e desativamos o colorama com os comandos init() e deinit() respectivamente. O init() serve para fazer com que o colorama comece a converter as sequências de escape em chamadas de sistemas Win32, caso o sistema operacional utilizado seja o Windows. No caso do Linux, por exemplo, o comando não faz nada, mas é bom mantê-lo aí para que seu programa se comporte da mesma forma em plataformas diferentes!

Para alterar as cores, utilizamos as constantes definidas em Fore (para a cor da letra) e em Back (para o fundo, ou background de cada caractere). Como os valores desses atributos são sequências de escape, precisamos apenas embuti-los na string que desejamos imprimir na tela. Para isso, basta utilizar o operador de soma ‘+’.

Fore e Back definem constantes para cores: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE. E mais uma constante, RESET, que faz com que o terminal volte a utilizar a cor original dele.

Vamos usar um outro script pra você ter uma ideia de todas as possibilidades de cores que o colorama oferece:

from colorama import Fore, Back, Style, init, deinit
frente = [Fore.BLACK, Fore.RED, Fore.GREEN, Fore.YELLOW, Fore.BLUE, Fore.MAGENTA, Fore.CYAN, Fore.WHITE]
fundo = [Back.BLACK, Back.RED, Back.GREEN, Back.YELLOW, Back.BLUE, Back.MAGENTA, Back.CYAN, Back.WHITE]
init()
for cor_frente in frente:
    for cor_fundo in fundo:
        print(cor_frente + cor_fundo + "AMADOR PROGRAMA", end = "")
print(Style.RESET_ALL) 
deinit()

Saída do programa:

Perceba que no final do programa, logo antes de deinit(), utilizamos Style.RESET_ALL. Essa constante serve para desfazer todas as alterações de cores (tanto no fundo quanto na cor do caractere) e de estilos.

É importante notar que se você não utilizar Fore.RESET, Back.RESET ou Style.RESET_ALL, a alteração de cor ou de estilo feita anteriormente continuará valendo para tudo que você imprimir na tela depois. Então é interessante terminar todas as suas strings coloridas com a opção de RESET apropriada.

Style tem mais 3 constantes: DIM, NORMAL e BRIGHT. Style.DIM deixa a letra mais apagada (ou não faz nada, a depender do seu terminal), Style.NORMAL é o estilo de letra normal, e o Style.BRIGHT funciona como uma espécie de negrito. Para praticar, faça testes com essas constantes no seu terminal e veja o que acontece!

Uma última observação importante sobre o colorama: como essa biblioteca converte sequências de escape em chamadas apropriadas Win32 quando executada no Windows, é possível utilizá-la para colorir o terminal no Windows mesmo que você use outra biblioteca para formatar seu texto, desde que essa biblioteca gere uma string com sequências de escape! Para isso, basta importar as funções init() e deinit(), e utilizá-las no início e no fim do programa.

Simples, não? Continue acompanhando o blog para conhecer outras bibliotecas interessantes para Python!

Related Posts

3 thoughts on “Terminal colorido no Python com colorama

  1. Amigo comecei estudar programação faz 5 meses e de cara gostei muito do backend. Seu site é extremamente didático e vc explica muito bem todo o contexto do código. Já vi tudo do seu site no que se refere ao Python e gostaria de saber pq só tem 2 páginas? kk. Posta mais mano. Inclusive gostaria de sua ajuda. Estou com um projeto mas acho q ainda n tenho conhecimento para fazer ele. Eu queria fazer um programa que pede para a pessoa um CNPJ e ele pega esse dado e altera a informação de um documento(no formato .ods). Tem uns documentos bem genéricos que eu lido no qual geralmente precisa só de mudar a data e o CNPJ.Basicamente eu trabalho com licitação e para comprar uma simples caneta agnt tem que fazer 11 documentos, todos já com um modelo genérico que nunca muda. só muda a data e o cnpj. consegue me dar uma luz?. Minha ideia era fazer um código que troque o cnpj e a data de todos esses docs. Não estou falando para fazer pra mim kkk mas tipo fazer um post de como mudar uma palavra de um documento (ods ou word) usando python. Desde já agradeço amigo.

    1. Oi, José! Desculpa a demora em responder. Fico muito feliz que você tenha curtido os artigos! Por esses tempos não tô conseguindo postar por conta da correria de faculdade e trabalho, mas nas férias vou tentar dar uma compensada. Pelo que você falou do seu problema, acho que o que você precisa é de uma lib que crie um template em ods e depois simplesmente substitua alguns campos específicos. Eu dei uma procurada rápida no google e achei essa lib aqui https://pypi.org/project/pyexcel-ods/ Não cheguei a testar, mas acho que resolve seu problema. Se não conseguir, avisa aí que eu tento estudar o assunto e fazer algum tutorial! Valeu!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *