Библиотека rich

У претходним лекцијама направили смо већ неколико игрица. Да би оне лепше изгледале и биле боље за коришћење користимо библиотеку rich.

Rich је библиотека за Пајтон која омогућава писање богатог текста (са бојама и стилом) на терминалу и приказивање напредних садржаја као што су табеле.

За разлику од библиотеке random коју смо спомињали, библиотеку rich је потребно да посебно инсталирамо да бисмо је користили.

Инсталација

Rich можеш једноставно иснталирати користећи терминал, тако што ћеш у њему унети команду python -m pip install rich.

Уколико је инсталација добро прошла, у терминалу ће ти се исписати пуно различитих линија, међу којима у једној од последњих пише Successfully installed rich, као на слици:

uspešna instalacija

Можеш да провериш да ли је rich успешно инсталиран тако што ћеш у терминалу унети команду python -m rich. Уколико јесте, исписаће ти се неке функционалности те библиотеке, као на слици:

rich opcije

Конзола

Ради боље контроле форматирања исписа користимо класу Console. Конзолу можемо замишљати као простор у којем ће се приказивати наша игрица. Текст исписујемо на конзоли методом print:

from rich.console import Console

console = Console()
console.print("Zdravo! 👋")
console.print(1,2,3)
console.print(['jedan', 2, {"tri":3, "četiri":4}])

Може се користити на сличан начин као функција print коју смо раније користили. Када покренеш претходни програм у свом окружењу приметићеш да су различити типови исписани различитом бојом. На једној конзоли можемо исписивати више редова текста један за другим, или је целу испразнити методом clear.

Коришћење методе clear показаћемо на примеру цртања квадрата звездицама из претходне лекције. Уколико желимо да изменимо тај програм тако да се 5 пута за редом исцртавају различити квадрати чије се ширине уносе, али тако да се у сваком тренутку види само један од њих, то можемо урадити на следећи начин:

from rich.console import Console

def ispisi_matricu_na_konzolu(matrica, console):
    for red in matrica:
        console.print(*red)

console = Console()
for i in range(5):
    broj = int(input("Unesite širinu kvadrata:"))
    console.clear()
    matrica_zvezdica = [["*" for i in range(broj)] for j in range(broj)]
    ispisi_matricu_na_konzolu(matrica_zvezdica, console)

Копирај овај програм у своје радно окружење и пробај да га покренеш. Приметићеш да се квадрат увек исцртава у горњем левом углу терминала.

time.sleep

Коришћењем функције sleep библиотеке time можемо да успавамо наш програм на одређен број сенкунди. На тај начин можемо правити анимације које се приказују на конзоли.

Програм који одбројава секунде до краја нове године:

from rich.console import Console
import time

console = Console()
console.clear()
for i in range(10,0,-1):
    console.print("✨", i, "✨")
    time.sleep(1)
    console.clear()
console.print("Srećna Nova godina! 🎄🎁")

Пробај да измениш програм Новогодишња јелка из једне од претходних лекција тако да исцртава јелку којој лампице мењају боју сваке секунде.

Стилизовање текста

Стил исписа текста на конзоли можемо изменити додавањем вредности параметра style методе print. Као вредност задајемо текст који може бити сачињен од различитих описа текста раздвојених размаком:

  • боју текста задајемо навођењем имена боје или њене HEX или RGB вредности. Постоји 256 именованих боја које се могу видети на овом сајту.

  • боју позадине тексте задајемо на сличан начин уз предлог on

  • bold, italic, underline strike задајемо додавањем одговарајуће речи

Копирај следећи код у своје радно окружење и пробај да га измениш тако да исписује црни текст на зеленој позадини:

from rich.console import Console

console = Console()
console.print("Zdravo!", style = "italic bold hot_pink underline on white")

Испис претходног програма:

roze pozdrav

Свака линија исписа може имати свој стил. RGB запис боје описујемо са 3 цела броја у интервалу [0,255] који описују редом количину црвеног, зеленог и плавог светла у боји. Овај запис можемо користити када желимо да насумично генеришемо боју тако што ћемо насумично генерисати 3 цела броја у поменутом интервалу:

from rich.console import Console
import random

console = Console()
console.print("10 poruka u nasumično izabranim bojama: ", style = "italic rgb(250,150,100)")
for i in range(10):
    r = random.randint(0,255)
    g = random.randint(0,255)
    b = random.randint(0,255)
    color = "rgb("+str(r)+","+str(g)+","+str(b)+")"
    console.print("Zdravo!", style = color)

Покретањем овог програма више пута сваки пут ћемо добити другачији резултат. Ово је један од њих:

zdravo u bojama

Више информација о коришћењу стилова можеш видети на овом сајту.

Табеле

Прављење и исцртавање табела можемо видети на примеру:

from rich.console import Console
from rich.table import Table

table = Table(title="Pesme Zdravka Čolića")

table.add_column("Naslov pesme", style="cyan")
table.add_column("Godina izdanja", style="magenta")
table.add_column("Album", style="green")
table.add_column("Tekst", style="yellow")

table.add_row("Gori vatra", "1973", "Singl", "Kemal Monteno")
table.add_row("Produži dalje", "1977", "Ako priđeš bliže", "Bora Đorđević")
table.add_row("Zagrli me", "1977", "Ako priđeš bliže", "Arsen Dedić")
table.add_row("Mađarica", "1981", "Malo pojačaj radio", "Đorđe Balašević", style="bold italic")
table.add_row("Tvoje oči", "1983", "Šta mi radiš", "Momčilo Bajagić Bajaga")

console = Console()
console.print(table)

Табела се састоји из колона и редова. Стил се може дефинисати и за један ред и за једну колону. Претходни програм исцртава следећу табелу:

zdravkove pesme

Табеле можемо користити за испис матрица:

from rich.console import Console
from rich.table import Table

def ispisi_tablu(console, matrica):
    table = Table(show_lines=True,show_header=False)
    for i in range(3):
        table.add_column(justify="center", width = 3)
    for row in matrica:
        table.add_row(*row)
    console.clear()
    console.print(table) 

console = Console()
tabla = [["X", "O", " "], ["X", "X", "O"], ["O", " ", "X"]]
ispisi_tablu(console, tabla)

Овај програм на основу задате матрице исписује следећу табелу:

iksoks tabla

Измени игрицу Икс-окс из прошлог поглавља тако да се у сваком тренутку приказује само најновије стање табле.

Више о табелама можеш видети на овом сајту.