Obsah
1. Tvorba aplikací a her s textovým uživatelským rozhraním s využitím knihovny Blessed
2. Knihovny pro ovládání textového terminálu
3. Knihovna Blessed se představuje
5. Přečtení základních informací o terminálu
6. Vymazání vybrané logické části plochy terminálu
7. Změna stylu vypsaných textů
8. Změna barvy textu (popředí)
10. Kombinace různých barev popředí (textů) a pozadí
11. 24bitové barvy v moderních emulátorech terminálu
12. 24bitové barvy na pozadí textu
13. Pojmenované barvy na popředí
14. Pojmenované barvy na pozadí
15. Zobrazení hypertextového odkazu
16. Obsah druhé (závěrečné) části článku
17. Repositář s demonstračními příklady
18. Články o tvorbě aplikací s grafickým uživatelským rozhraním
19. Články o tvorbě aplikací s textovým uživatelským rozhraním
1. Tvorba aplikací a her s textovým uživatelským rozhraním s využitím knihovny Blessed
Již mnohokrát jsme se na stránkách Roota zabývali problematikou tvorby aplikací s plnohodnotným grafickým uživatelským rozhraním – viz též osmnáctou kapitolu s příslušnými odkazy, které se konkrétně týkají článků o grafickém uživatelském rozhraní v Pythonu. Ovšem existuje relativně velké množství aplikací popř. nástrojů či her, pro které může být vhodnější použít terminál, resp. konzoli. Příkladem jsou aplikace, k nimž se přistupuje přes SSH, systémové nástroje apod. Takové aplikace dělíme do dvou skupin. Do první skupiny spadají interaktivně či neinteraktivně ovládané aplikace s příkazovým řádkem. Příkladem takových aplikací mohou být správci balíčků (dnf, apt-get), které s uživatelem interagují pouze několika otázkami typu Y/N. Dalším příkladem je nástroj fdisk se složitějším systémem menu, z nichž se položka vybírá svým jménem (a nikoli například pohybem kurzoru).
Obrázek 1: Mnoho aplikací sice využívá rozšířených možností textových terminálů, ovšem stále se jedná spíše o neinteraktivní nástroje bez celoobrazovkového přístupu k terminálu. Příkladem je příkaz dnf, který může v některých případech zobrazit jednoduchou otázku a očekávat odpověď.
A do druhé skupiny aplikací určených pro běh v terminálu můžeme zařadit aplikace s plnohodnotným textovým uživatelským rozhraním neboli TUI (Text User Interface). Takových aplikací existuje celá řada. Zmínit můžeme zejména celoobrazovkové textové editory (pochopitelně včetně Vimu a Emacsu), Midnight Commander, nástroj Aptitude, ale i některé hry používající celoobrazovkový textový režim (0verkill, Rogue, Nethack, Angband, DoomRL atd.).
Obrázek 2: DoomRL – úvodní ASCII art je takřka dokonalý.
Textové uživatelské rozhraní je u některých aplikací volitelné. Dobrým příkladem takového typu aplikace je GNU Debugger, který buď pracuje v režimu příkazového řádku, nebo ho lze přepnout do režimu s celoobrazovkovým textovým uživatelským rozhraním. I o tvorbě těchto aplikací jsme se ve stručnosti již zmínili v souvislosti s balíčky GNU Readline a především prompt_toolkit. Odkazy na tyto články jsou obsahem devatenácté kapitoly.
Obrázek 3: GNU Debugger po zobrazení textového uživatelského rozhraní (TUI) ve chvíli, kdy je nastaven breakpoint na vstupní bod (přesněji řečeno na první příkaz) ve funkci main. Na levém okraji se zobrazují jak breakpointy, tak i ukazatel na právě prováděný či krokovaný příkaz.
Obrázek 4: Hra Angband s textovým uživatelským rozhraním ve verzi pro Linux – podrobnější charakteristiky hrdiny.
2. Knihovny pro ovládání textového terminálu
U obou dvou výše zmíněných typů aplikací je nutné umět do určité míry ovládat terminálový výstup, aby například bylo možné smazat znak/řádek, zvýraznit text změnou jeho stylu, barvy textu, barvy pozadí atd. A u aplikací s plnohodnotným textovým uživatelským rozhraním je pochopitelně nutné terminál ovládat do ještě větší míry, aby bylo možné pracovat s okny, menu, nápovědou a dalšími ovládacími prvky (widgety). Vzhledem k tomu, že se textové terminály vyvíjejí už velmi dlouho (minimálně od roku 1965, kdy vznikl první skutečný počítačový terminál IBM 2741 jako náhrada za dálnopisy) jsou rozdílné i jejich možnosti (vlastnosti) i způsob jejich ovládání (většinou s využitím řídicích kódů, dnes většinou založených na takzvaných escape sekvencích a několika dalších ASCII znacích).
Obrázek 5: Část sálového počítače IBM System/360 Model 40 (rok výroby 1964). V pozadí můžeme vidět jednotky s magnetickými pásky (model IBM 2401), ovládací panel je umístěn přímo za slečnou. A slečna sedí u dálnopisu, tedy přímého předchůdce počítačových terminálů.
Samozřejmě jsme mohli v průběhu předchozích desetiletí vidět snahu o sjednocení ovládání terminálů, která probíhala paralelně s vytvářením databáze obsahující vlastnosti terminálů (terminfo a termcap). Existují také knihovny, které programátora dokážou odizolovat od nízkoúrovňového přístupu k terminálům a jejich řízení s využitím řídicích kódů. Jedná se především o knihovnu curses a jejího následovníka ncurses (viz článek Psaní aplikací pro terminál: jak funguje knihovna ncurses, popř. o utility spouštěné z příkazového řádku (tput, tset, reset atd.).
Obrázek 6: Midnight Commander je jedním z užitečných nástrojů postavených nad ncurses.
V dnešním článku se však zaměříme na popis jiné knihovny, resp. přesněji řečeno balíčku. Jedná se o knihovnu nazvanou Blessed, která je určena pro použití v aplikacích naprogramovaných v jazyku Python. Tato knihovna, a to včetně jejího jména, je inspirována knihovnou Blessed určenou pro programovací jazyk JavaScript, jejíž zaměření je ovšem poněkud odlišné, neboť JavaScriptová verze obsahuje velké množství ovládacích prvků, formulářů atd., dále rozšířených v knihovně Blessed-contrib. Ovšem podobných knihoven, více či méně inspirovaných právě knihovnou Blessed, postupně vzniklo větší množství.
Obrázek 7: Ovládací prvky vykreslené s využitím knihovny Blessed-contrib (JavaScript).
Zdroj: https://github.com/yaronn/blessed-contrib.
Za připomenutí stojí především knihovna termui určená pro použití v aplikacích naprogramovaných v jazyce Go, popř. knihovna tui-rs, která je naopak určena pro aplikace vyvinuté v programovacím jazyku Rust. Tyto knihovny poskytují zejména možnost posunu textového kurzoru po ploše terminálu, mazání a přidávání textu na určenou pozici, změnu stylu vykreslování, popř. změnu barvy pozadí a popředí, ale i pokročilejší operace s textovými plochami (okny), tvorbu animovaných prvků apod.
Obrázek 8: Ovládací prvky vykreslené knihovnou tui-rs.
Zdroj: https://github.com/fdehau/tui-rs.
Dnes si ukážeme pouze základní možnosti poskytované knihovnou Blessed pro Python. Pokročilejšími operacemi se budeme zabývat ve druhém (a současně i závěrečném) pokračování dnešního článku.
3. Knihovna Blessed se představuje
V dalším textu se budeme zabývat knihovnou Blessed určenou pro jazyk Python. Tato knihovna je jak svým rozsahem funkcí, tak i zaměřením odlišná od knihovny se stejným jménem; která je ovšem navržena pro použití z JavaScriptu, TypeScriptu či z dalších jazyků transpilovaných do JavaScriptu. Na rozdíl od knihoven zmíněných v předchozí kapitole je Blessed pro Python z pohledu uživatele pojata minimalistickým způsobem. Umožňuje totiž změnu stylu a barvy vypisovaných textů (což je vhodné i pro aplikace nepoužívající celoobrazovkové TUI), vymazání části plochy terminálu, přesun kurzoru na libovolné místo v terminálu a v neposlední řadě taktéž okamžitou reakci na stisk kláves (na rozdíl od čekání na Enter), popř. reakci na změnu velikosti okna terminálu. Kromě toho je možné zachytávat proud bajtů posílaných na standardní výstup. Většina těchto vlastností vyžaduje relativně složitou interní logiku, ovšem pro uživatele-programátora je použití těchto funkcí přímočaré.
Blessed lze použít například pro vývoj her či dalších aplikací, které potřebují „vykreslit“ nějaké grafy či diagramy. Naopak pokud pouze vyžadujete tvorbu TUI se standardními ovládacími prvky, může být výhodnější použít knihovnu prompt_toolkit – viz též kapitolu číslo 19.
4. Instalace knihovny Blessed
Instalace knihovny Blessed je snadná, protože tato knihovna je dostupná ve formě balíčku poskytovaného přes PyPi. Pro její instalaci tedy použijeme příkaz pip, resp. pip3, a to podle toho, jaké verze Pythonu jsou na systému nainstalovány a jaká verze je vybrána jako výchozí (instalaci je však pochopitelně možné provést i z virtuálního prostředí Pythonu):
$ pip3 install --user blessed Collecting blessed Downloading https://files.pythonhosted.org/packages/26/35/a781470488a304f66843d328052b6cb22df7163246fb47a27bfb21fba4e6/blessed-1.18.0-py2.py3-none-any.whl (81kB) 100% |████████████████████████████████| 81kB 778kB/s Requirement already satisfied: six>=1.9.0 in ./.local/lib/python3.6/site-packages (from blessed) Requirement already satisfied: wcwidth>=0.1.4 in ./.local/lib/python3.6/site-packages (from blessed) Installing collected packages: blessed Successfully installed blessed-1.18.0
Následně z interaktivní smyčky Pythonu ověříme, že nový balíček je skutečně dostupný. Spustíme REPL Pythonu:
$ python3 Python 3.9.4 (default, Apr 6 2021, 00:00:00) [GCC 11.0.1 20210324 (Red Hat 11.0.1-0)] on linux Type "help", "copyright", "credits" or "license" for more information. Type "help", "copyright", "credits" or "license" for more information. >>>
Naimportujeme balíček nazvaný blessed:
>>> import blessed
Pokud při importu nedošlo k chybě, měla by být dostupná nápověda:
>>> help(blessed) Help on package blessed: NAME blessed - A thin, practical wrapper around terminal capabilities in Python. DESCRIPTION http://pypi.python.org/pypi/blessed PACKAGE CONTENTS _capabilities color colorspace formatters keyboard sequences terminal tests (package) win_terminal
Nejdůležitější třídou z tohoto balíčku je třída Terminal:
>>> help(blessed.Terminal) Help on class Terminal in module blessed.terminal: class Terminal(builtins.object) | An abstraction for color, style, positioning, and input in the terminal. | | This keeps the endless calls to ``tigetstr()`` and ``tparm()`` out of your code, acts | intelligently when somebody pipes your output to a non-terminal, and abstracts over the | complexity of unbuffered keyboard input. It uses the terminfo database to remain portable across | terminal types.
5. Přečtení základních informací o terminálu
V praktické části článku si ukážeme některé možnosti použití knihovny Blessed. Nejprve získáme základní informace o použitém terminálu, a to přístupem k atributům width, height a number_of_colors:
import blessed terminal = blessed.Terminal() print("Resolution: {}x{} characters".format(terminal.width, terminal.height)) print("Number of colors: {}".format(terminal.number_of_colors))
Příklad výstupu pro xterm:
$ python3 terminal_info.py Resolution: 159x42 characters Number of colors: 8
6. Vymazání vybrané logické části plochy terminálu
Knihovna Blessed obsahuje podporu pro čtveřici řídicích kódů, které slouží pro smazání určité vybrané plochy terminálu (resp. textu na této ploše). Tyto řídicí kódy jsou dostupné pod jmény clear, clear_eol, clear_bol a clear_eos:
# | Atribut | Stručný popis |
---|---|---|
1 | clear | smazání celé plochy terminálu |
2 | clear_eol | smazání od pozice kurzoru do konce řádku |
3 | clear_bol | smazání od pozice kurzoru na začátek řádku |
4 | clear_eos | smazání od pozice kurzoru do konce obrazovky |
Pravděpodobně nejčastěji se setkáme s požadavkem smazání celé obrazovky, přesněji řečeno celé plochy terminálu. To je triviální úloha:
import blessed terminal = blessed.Terminal() print(terminal.clear)
7. Změna stylu vypsaných textů
Po inicializaci objektu typu Terminal je možné měnit styl textů vypisovaných aplikací funkcí print či podobnými funkcemi. K tomuto účelu slouží několik atributů objektu Terminal:
# | Atribut | Stručný popis |
---|---|---|
1 | normal | text s výchozím (běžným) stylem |
2 | bold | tučný text, popř. změna kontrastu |
3 | reverse | záměna barvy popředí a pozadí |
4 | underline | podtržený text |
5 | no_underline | opak předchozího atributu |
Interně se jedná o řídicí kódy terminálu, takže tyto atributy můžeme použít například ve funkci print (v Pythonu 2 ve stejnojmenném příkazu):
import blessed terminal = blessed.Terminal() print(terminal.normal + "normal text") print(terminal.bold + "bold text" + terminal.normal) print(terminal.underline + "underlined text" + terminal.normal) print(terminal.reverse + "reversed text" + terminal.normal) print() print(terminal.bold + "bold " + terminal.underline + "and underlined " + terminal.normal + "text") print() print(terminal.underline + "underlined " + terminal.reverse + "and reversed " + terminal.normal + "text") print() print(terminal.reverse + "reversed " + terminal.bold + "and bold " + terminal.normal + "text")
Výsledek (pro nakonfigurovaný xterm):
Obrázek 9: Základní styly vykreslení textů.
Výhodnější je však použití takzvaných f-řetězců, které nás odstíní od nutnosti volat metodu format nebo spojovat jednotlivé řídicí kódy s vlastním vypisovaným textem (pokud používáte novější verzi Pythonu):
import blessed terminal = blessed.Terminal() print(f"{terminal.normal}normal text{terminal.normal}") print(f"{terminal.bold}bold text{terminal.normal}") print(f"{terminal.underline}underlined text{terminal.normal}") print(f"{terminal.reverse}reversed text{terminal.normal}") print() print(f"{terminal.bold}bold{terminal.underline} and underlined{terminal.normal} text") print() print(f"{terminal.underline}underlined {terminal.reverse}and reversed{terminal.normal} text") print() print(f"{terminal.reverse}reversed {terminal.bold}and bold{terminal.normal} text")
Výsledek by měl být totožný s předchozím příkladem:
Obrázek 10: Základní styly vykreslení textů vykreslené předchozím příkladem.
8. Změna barvy textu (popředí)
Prakticky všechny moderní terminály umožňují i změnu barvy vypisovaného textu. Na úrovni komunikace s terminálem se barvy mění posláním příslušného řídicího kódu (dnes nejčastěji escape sekvence), ovšem knihovna Blessed nás od těchto technických podrobností odstiňuje a umožňuje nám použít přímo atributy se jmény barev, které mohou být vytištěny například standardní funkcí print. Terminály, resp. dnes v naprosté většině případů emulátory terminálů, podporují různé počty barev – ty nejjednodušší a nejstarší pouze osm barev (buď pevně nastavených, nebo s volitelnou paletou), setkáme se i se šestnácti barvami (osm základních barev + jejich světlejší varianty), 256 barvami a moderní terminály od roku 2016 podporují i true color neboli 224 barvových odstínů.
Nejdříve si ukažme osm základních barev, které mají svá jména a dají se vybrat následovně:
import blessed terminal = blessed.Terminal() print(f"{terminal.black}black text{terminal.normal}") print(f"{terminal.red}red text{terminal.normal}") print(f"{terminal.green}green text{terminal.normal}") print(f"{terminal.yellow}yellow text{terminal.normal}") print(f"{terminal.blue}blue text{terminal.normal}") print(f"{terminal.magenta}magenta text{terminal.normal}") print(f"{terminal.cyan}cyan text{terminal.normal}") print(f"{terminal.white}white text{terminal.normal}")
Podívejme se nyní na výsledek běhu tohoto příkladu:
Obrázek 11: Osm základních barev textu.
Základních osm barev většinou existuje i ve světlejších odstínech, které lze zvolit zápisem prefixu bold, popř. bright. Opět platí, že konkrétní způsob zobrazení je závislý na nastavení daného terminálu a že jména logických barev nemusí odpovídat barvám skutečně zobrazeným (například xterm nerozezná „bright“ variantu a vyžaduje „bold“ variantu):
import blessed terminal = blessed.Terminal() print(f"{terminal.bold_black}black text{terminal.normal}") print(f"{terminal.bold_red}red text{terminal.normal}") print(f"{terminal.bold_green}green text{terminal.normal}") print(f"{terminal.bold_yellow}yellow text{terminal.normal}") print(f"{terminal.bold_blue}blue text{terminal.normal}") print(f"{terminal.bold_magenta}magenta text{terminal.normal}") print(f"{terminal.bold_cyan}cyan text{terminal.normal}") print(f"{terminal.bold_white}white text{terminal.normal}")
Obrázek 12: Osm upravených barev textu atributem bold.
9. Změna barvy pozadí
Naprosto stejným způsobem, jako barvu textu (tedy popředí) je možné volit i barvu pozadí. Používají se i stejná jména barev, ovšem před jejich jméno je nutné zadat prefix on_, což znamená „zobrazeno na…“. Podívejme se nyní na zdrojový kód příkladu, v němž je použito osm základních barev pozadí:
import blessed terminal = blessed.Terminal() print(f"{terminal.on_black}black background{terminal.normal}") print(f"{terminal.on_red}red background{terminal.normal}") print(f"{terminal.on_green}green background{terminal.normal}") print(f"{terminal.on_yellow}yellow background{terminal.normal}") print(f"{terminal.on_blue}blue background{terminal.normal}") print(f"{terminal.on_magenta}magenta background{terminal.normal}") print(f"{terminal.on_cyan}cyan background{terminal.normal}") print(f"{terminal.on_white}white background{terminal.normal}")
Obrázek 13: Osm základních barev pozadí.
I pro osm základních barev pozadí existuje „světlá“ nebo „tučná“ varianta, která je použita v následujícím skriptu:
import blessed terminal = blessed.Terminal() print(f"{terminal.bold_on_black}black background{terminal.normal}") print(f"{terminal.bold_on_red}red background{terminal.normal}") print(f"{terminal.bold_on_green}green background{terminal.normal}") print(f"{terminal.bold_on_yellow}yellow background{terminal.normal}") print(f"{terminal.bold_on_blue}blue background{terminal.normal}") print(f"{terminal.bold_on_magenta}magenta background{terminal.normal}") print(f"{terminal.bold_on_cyan}cyan background{terminal.normal}") print(f"{terminal.bold_on_white}white background{terminal.normal}")
Obrázek 14: Osm základních barev pozadí modifikovaných atributem bold.
10. Kombinace různých barev popředí (textů) a pozadí
Barva popředí se volí nezávisle na barvě pozadí, popř. nezávisle na stylu vykreslení textu. V následujícím demonstračním příkladu je ukázáno, jak lze zobrazit všech 64 kombinací základních osmi barev popředí a pozadí:
import blessed terminal = blessed.Terminal() textColors = ( terminal.black, terminal.red, terminal.green, terminal.yellow, terminal.blue, terminal.magenta, terminal.cyan, terminal.white, ) backgroundColors = ( terminal.on_black, terminal.on_red, terminal.on_green, terminal.on_yellow, terminal.on_blue, terminal.on_magenta, terminal.on_cyan, terminal.on_white, ) for textColor in textColors: for backgroundColor in backgroundColors: print(f"{textColor}{backgroundColor}XXXXX{terminal.normal} ", end="") print()
Obrázek 15: 64 kombinací barev textu a pozadí.
11. 24bitové barvy v moderních emulátorech terminálu
V předchozích kapitolách jsme si řekli, že terminály většinou podporují osm, šestnáct, 256, popř. 224 barev (xterm pak 4096 barev). Knihovna Blessed dokáže pracovat s celým barvovým spektrem, tedy s oněmi více než šestnácti miliony barvových odstínů (záleží pak na konkrétním terminálu, zda dokáže všechny barvy zobrazit nebo například provede převod na nejbližší barvu z palety 4096 odstínů). Pro převod vlastní barvy (reprezentované většinou v barvovém prostoru RGB) na příslušný řídicí kód (escape sekvenci) slouží funkce nazvaná color_rgb. Tato funkce je použita v dalším demonstračním příkladu pro zobrazení části podporovaného barvového spektra (povšimněte si, že terminálu vnucujeme podporu pro celé barvové spektrum – což bude funkční například i na terminálu z Windows):
import blessed terminal = blessed.Terminal() terminal.number_of_colors = 1 << 24 for red in range(0, 256, 16): for green in range(0, 256, 16): for blue in range(0, 256, 16): hex_triplet = "#{:02x}{:02x}{:02x}".format(red, green, blue) print(terminal.color_rgb(red, green, blue) + hex_triplet, end=" ") print() print() print() print(f"{terminal.normal}DONE")
Obrázek 16: Část 24bitové barvové škály.
Obrázek 17: Část 24bitové barvové škály.
12. 24bitové barvy na pozadí textu
Z celého barvového spektra s šestnácti miliony odstínů je možné vybrat i barvu pozadí, což je ukázáno v dalším skriptu:
import blessed terminal = blessed.Terminal() terminal.number_of_colors = 1 << 24 for red in range(0, 256, 16): for green in range(0, 256, 16): for blue in range(0, 256, 16): hex_triplet = "#{:02x}{:02x}{:02x}".format(red, green, blue) print(terminal.on_color_rgb(red, green, blue) + hex_triplet, end=" ") print() print() print() print(f"{terminal.normal}DONE")
Obrázek 18: Část 24bitové barvové škály na pozadí.
Obrázek 19: Část 24bitové barvové škály na pozadí.
13. Pojmenované barvy na popředí
Z předešlého textu je zřejmé, že barvy jsou buď pojmenovány (osm základních barev), nebo je lze zvolit s využitím barvového prostoru RGB. Knihovna Blessed však jde ještě dále a nabízí uživatelům-programátorům i jména dalších barev a jejich odstínů. Tato jména jsou získána z „databáze“ používané systémem X a najdete je na adrese https://blessed.readthedocs.io/en/latest/colors.html#color-chart.
Příklad použití (zdrojový text příkladu je v článku zkrácen):
import blessed terminal = blessed.Terminal() terminal.number_of_colors = 1 << 24 colors = ( terminal.aliceblue, terminal.antiquewhite, terminal.antiquewhite1, terminal.antiquewhite2, terminal.antiquewhite3, terminal.antiquewhite4, terminal.qua, terminal.quamarine, terminal.quamarine1, terminal.quamarine2, terminal.quamarine3, terminal.quamarine4, ... ... ... terminal.yellow, terminal.yellow1, terminal.yellow2, terminal.yellow3, terminal.yellow4, terminal.yellowgreen) for color in colors: print(color + "test") print() print(f"{terminal.normal}DONE")
Obrázek 20: Výsledek běhu předchozího demonstračního příkladu.
14. Pojmenované barvy na pozadí
Ukažme si i změnu pozadí s využitím existujících jmen barev a jejich odstínů. Platí přitom stále stejná jmenná konvence – před jméno barvy se zapíše prefix on_:
import blessed terminal = blessed.Terminal() terminal.number_of_colors = 1 << 24 colors = ( terminal.on_aliceblue, terminal.on_antiquewhite, terminal.on_antiquewhite1, terminal.on_antiquewhite2, terminal.on_antiquewhite3, terminal.on_antiquewhite4, ... ... ... terminal.on_yellow, terminal.on_yellow1, terminal.on_yellow2, terminal.on_yellow3, terminal.on_yellow4, terminal.on_yellowgreen) for color in colors: print(color + "test") print() print(f"{terminal.normal}DONE")
Obrázek 21: Výsledek běhu předchozího demonstračního příkladu.
15. Zobrazení hypertextového odkazu
Poslední funkce knihovny Blessed, s níž se dnes seznámíme, je podporovaná většinou moderních emulátorů terminálů. Jedná se o možnost zobrazení hypertextového odkazu, přesněji řečeno odkazu, jehož text (titulek) je odlišný od vlastní adresy (běžné adresy, resp. URL dokážou terminály detekovat samy). Hypertextový odkaz se vkládá metodou Terminal.link tak, jak je to ukázáno v dnešním posledním demonstračním příkladu. Této metodě se nejdříve předá adresa (URL) a poté text neboli titulek odkazu:
import blessed terminal = blessed.Terminal() print(f"Odkaz: {terminal.link('https://www.root.cz', 'Stránky Root.cz')}")
16. Obsah druhé (závěrečné) části článku
Dnes jsme si popsali pouze základní funkce knihovny Blessed, které je možné použít pro změnu (vylepšení) zobrazení údajů na terminálu. To je však pouze malá část celkové funkcionality. Aby bylo možné vytvářet plnohodnotné celoobrazovkové aplikace, je nutné umět přesunout textový kurzor na libovolnou pozici na terminálu (sloupec, řádek), reagovat na stisk klávesy (a nikoli čekat na potvrzení Enterem), popř. reagovat na změnu velikosti okna terminálu. Tyto funkce budou popsány ve druhé a současně i poslední části mikroseriálku o knihovně Blessed.
17. Repositář s demonstračními příklady
Zdrojové kódy všech dnes popsaných demonstračních příkladů určených pro Python 3 byly uloženy do Git repositáře dostupného na adrese https://github.com/tisnik/most-popular-python-libs. V případě, že nebudete chtít klonovat celý repositář (ten je ovšem stále velmi malý, dnes má velikost zhruba několik desítek kilobajtů), můžete namísto toho použít odkazy na jednotlivé příklady, které naleznete v následující tabulce:
18. Články o tvorbě aplikací s grafickým uživatelským rozhraním
Tento článek se zabývá tvorbou aplikací s uživatelským rozhraním v Pythonu. Neškodí si proto připomenout, že právě pro Python existuje poměrně velké množství knihoven určených pro práci s grafickým uživatelským rozhraním. Mnohé z těchto knihoven jsme si již na stránkách Roota popsali, a to v následujících článcích:
- Knihovny pro tvorbu grafického uživatelského rozhraní v Pythonu
https://www.root.cz/clanky/knihovny-pro-tvorbu-grafickeho-uzivatelskeho-rozhrani-v-pythonu/ - Grafické uživatelské rozhraní v Pythonu: knihovna Tkinter
https://www.root.cz/clanky/graficke-uzivatelske-rozhrani-v-pythonu-knihovna-tkinter/ - Grafické uživatelské rozhraní v Pythonu: knihovna Tkinter (2.část)
https://www.root.cz/clanky/graficke-uzivatelske-rozhrani-v-pythonu-knihovna-tkinter-2-cast/ - Grafické uživatelské rozhraní v Pythonu: knihovna Tkinter (3.část)
https://www.root.cz/clanky/graficke-uzivatelske-rozhrani-v-pythonu-knihovna-tkinter-3-cast/ - Grafické uživatelské rozhraní v Pythonu: menu v knihovně Tkinter
https://www.root.cz/clanky/graficke-uzivatelske-rozhrani-v-pythonu-menu-v-knihovne-tkinter/ - Grafické uživatelské rozhraní v Pythonu: kouzla s kreslicí plochou (canvasem)
https://www.root.cz/clanky/graficke-uzivatelske-rozhrani-v-pythonu-kouzla-s-kreslici-plochou-canvasem/ - Grafické uživatelské rozhraní v Pythonu: kouzla s kreslicí plochou (2. část)
https://www.root.cz/clanky/graficke-uzivatelske-rozhrani-v-pythonu-kouzla-s-kreslici-plochou-2-cast/ - Grafické uživatelské rozhraní v Pythonu: kouzla s kreslicí plochou (dokončení)
https://www.root.cz/clanky/graficke-uzivatelske-rozhrani-v-pythonu-kouzla-s-kreslici-plochou-dokonceni/ - Grafické uživatelské rozhraní v Pythonu: další možnosti nabízené widgety Text a ScrolledText
https://www.root.cz/clanky/graficke-uzivatelske-rozhrani-v-pythonu-dalsi-moznosti-nabizene-widgety-text-a-scrolledtext/ - Grafické uživatelské rozhraní v Pythonu: použití dialogových oken v knihovně Tkinter
https://www.root.cz/clanky/graficke-uzivatelske-rozhrani-v-pythonu-pouziti-dialogovych-oken-v-knihovne-tkinter/ - Tvorba grafického uživatelského rozhraní v Pythonu s využitím knihovny appJar
https://www.root.cz/clanky/tvorba-grafickeho-uzivatelskeho-rozhrani-v-pythonu-s-vyuzitim-knihovny-appjar/ - Tvorba grafického uživatelského rozhraní v Pythonu: widgety v knihovně appJar
https://www.root.cz/clanky/tvorba-grafickeho-uzivatelskeho-rozhrani-v-pythonu-widgety-v-knihovne-appjar/ - Tvorba grafického uživatelského rozhraní v Pythonu: dokončení popisu widgetů v knihovně appJar
https://www.root.cz/clanky/tvorba-grafickeho-uzivatelskeho-rozhrani-v-pythonu-dokonceni-popisu-widgetu-v-knihovne-appjar/ - Tvorba GUI v Pythonu: menu, toolbary a widgety pro vstup textu v knihovně appJar
https://www.root.cz/clanky/tvorba-gui-v-pythonu-menu-toolbary-a-widgety-pro-vstup-textu-v-knihovne-appjar/ - Tvorba GUI v Pythonu: widgety pro zobrazení tabulek a stromů v knihovně appJar
https://www.root.cz/clanky/tvorba-gui-v-pythonu-widgety-pro-zobrazeni-tabulek-a-stromu-v-knihovne-appjar/ - Tvorba GUI v Pythonu: widgety pro zobrazení grafických informací nabízené knihovnou appJar
https://www.root.cz/clanky/tvorba-gui-v-pythonu-widgety-pro-zobrazeni-grafickych-informaci-nabizene-knihovnou-appjar/ - Tvorba GUI v Pythonu: použití želví grafiky společně s knihovnou appJar
https://www.root.cz/clanky/tvorba-gui-v-pythonu-pouziti-zelvi-grafiky-spolecne-s-knihovnou-appjar/ - Tvorba grafického uživatelského rozhraní v Pythonu s využitím frameworku PySide
https://www.root.cz/clanky/tvorba-grafickeho-uzivatelskeho-rozhrani-v-pythonu-s-vyuzitim-frameworku-pyside/ - Tvorba GUI v Pythonu s PySide: signály a sloty, správci rozložení komponent
https://www.root.cz/clanky/tvorba-gui-v-pythonu-s-pyside-signaly-a-sloty-spravci-rozlozeni-komponent/ - Tvorba GUI v Pythonu s PySide: další dostupné ovládací prvky
https://www.root.cz/clanky/tvorba-gui-v-pythonu-s-pyside-dalsi-dostupne-ovladaci-prvky/ - Tvorba GUI v Pythonu s PySide: přepínací tlačítka a tvorba hlavních oken aplikací
https://www.root.cz/clanky/tvorba-gui-v-pythonu-s-pyside-prepinaci-tlacitka-a-tvorba-hlavnich-oken-aplikaci/ - Tvorba GUI v Pythonu s PySide: hlavní menu, nástrojový pruh a výběrový seznam
https://www.root.cz/clanky/tvorba-gui-v-pythonu-s-pyside-hlavni-menu-nastrojovy-pruh-a-vyberove-seznam/ - Tvorba GUI v Pythonu s využitím frameworku PySide: rastrová a vektorová grafika
https://www.root.cz/clanky/tvorba-gui-v-pythonu-s-vyuzitim-frameworku-pyside-rastrova-a-vektorova-grafika/ - Tvorba GUI v PySide: grafické operace používající třídu QPainter
https://www.root.cz/clanky/tvorba-gui-v-pyside-graficke-operace-pouzivajici-tridu-qpainter/ - Tvorba GUI v Pythonu s PySide: pokročilejší grafické operace používající třídu QPainter
https://www.root.cz/clanky/tvorba-gui-v-pythonu-s-pyside-pokrocilejsi-graficke-operace-pouzivajici-tridu-qpainter/ - Tvorba GUI v Pythonu s PySide: použití cest při kreslení 2D scén
https://www.root.cz/clanky/tvorba-gui-v-pythonu-s-pyside-pouziti-cest-pri-kresleni-2d-scen/ - GUI v Pythonu s PySide: rastrové operace, vykreslování textů
https://www.root.cz/clanky/gui-v-pythonu-s-pyside-rastrove-operace-vykreslovani-textu/ - Tvorba GUI v Pythonu s využitím frameworku PySide: widgety pro textový vstup
https://www.root.cz/clanky/tvorba-gui-v-pythonu-s-vyuzitim-frameworku-pyside-widgety-pro-textovy-vstup/ - Složitější ovládací prvky ve frameworku PySide: tabulky a stromy
https://www.root.cz/clanky/slozitejsi-ovladaci-prvky-ve-frameworku-pyside-tabulky-a-stromy/ - Další užitečné ovládací prvky nabízené frameworkem PySide
https://www.root.cz/clanky/dalsi-uzitecne-ovladaci-prvky-nabizene-frameworkem-pyside/ - Standardní dialogy v knihovně PySide
https://www.root.cz/clanky/standardni-dialogy-v-nbsp-knihovne-pyside/ - Konfigurace standardních dialogů nabízených knihovnou PySide
https://www.root.cz/clanky/konfigurace-standardnich-dialogu-nabizenych-knihovnou-pyside/ - Nastavení stylů vykreslování widgetů, oken i dialogů v knihovně PySide
https://www.root.cz/clanky/nastaveni-stylu-vykreslovani-widgetu-oken-i-dialogu-v-knihovne-pyside/ - Tvorba GUI v Pythonu: použití kaskádových stylů v PySide
https://www.root.cz/clanky/tvorba-gui-v-pythonu-pouziti-kaskadovych-stylu-v-pyside/ - Práce s vektorovým formátem SVG ve frameworku PySide
https://www.root.cz/clanky/prace-s-vektorovym-formatem-svg-ve-frameworku-pyside/ - Práce s vektorovým formátem SVG ve frameworku PySide (dokončení)
https://www.root.cz/clanky/prace-s-vektorovym-formatem-svg-ve-frameworku-pyside-dokonceni/ - Použití UI souborů s popisem formulářů ve frameworku PySide
https://www.root.cz/clanky/pouziti-ui-souboru-s-popisem-formularu-ve-frameworku-pyside/ - Jazyk QML (Qt Modeling Language) a PySide
https://www.root.cz/clanky/jazyk-qml-qt-modeling-language-a-pyside/ - Jazyk QML (Qt Modeling Language) a PySide 2
https://www.root.cz/clanky/jazyk-qml-qt-modeling-language-a-pyside-2/ - Reakce na události v GUI deklarované v jazyku QML a PySide 2
https://www.root.cz/clanky/reakce-na-udalosti-v-gui-deklarovane-v-jazyku-qml-a-pyside-2/ - Interaktivní tvorba grafického uživatelského rozhraní nástrojem Pygubu
https://www.root.cz/clanky/interaktivni-tvorba-grafickeho-uzivatelskeho-rozhrani-nastrojem-pygubu/ - Interaktivní tvorba grafického uživatelského rozhraní s využitím nástroje Pygubu (2)
https://www.root.cz/clanky/interaktivni-tvorba-grafickeho-uzivatelskeho-rozhrani-s-vyuzitim-nastroje-pygubu-2/ - Interaktivní tvorba grafického uživatelského rozhraní s využitím nástroje Pygubu (dokončení)
https://www.root.cz/clanky/interaktivni-tvorba-grafickeho-uzivatelskeho-rozhrani-s-vyuzitim-nastroje-pygubu-dokonceni/
19. Články o tvorbě aplikací s textovým uživatelským rozhraním
Na stránkách Roota jsme se zabývali taktéž některými knihovnami (opět určenými primárně pro Python), které je možné použít pro tvorbu aplikací s celoobrazovkovým (či chcete-li celoterminálovým) textovým uživatelským rozhraním. Podporu pro TUI poskytuje především knihovna prompt_toolkit:
- Tvorba aplikací s příkazovým řádkem v Pythonu s knihovnami GNU Readline a prompt_toolkit
https://www.root.cz/clanky/tvorba-aplikaci-s-prikazovym-radkem-v-pythonu-s-vyuzitim-knihoven-gnu-readline-a-prompt-toolkit/ - Tvorba aplikací s textovým uživatelským rozhraním založeným na knihovně prompt_toolkit
https://www.root.cz/clanky/tvorba-aplikaci-s-textovym-uzivatelskym-rozhranim-zalozenym-na-knihovne-prompt-toolkit/ - Tvorba textového rozhraní s knihovnou prompt_toolkit: základní prvky TUI
https://www.root.cz/clanky/tvorba-textoveho-rozhrani-s-knihovnou-prompt-toolkit-zakladni-prvky-tui/ - Tvorba TUI s knihovnou prompt_toolkit: aplikace s celoobrazovkovým rozhraním
https://www.root.cz/clanky/tvorba-tui-s-knihovnou-prompt-toolkit-aplikace-s-celoobrazovkovym-rozhranim/ - Tvorba textového uživatelského rozhraní s knihovnou prompt_toolkit: ovládací prvky (widgety)
https://www.root.cz/clanky/tvorba-textoveho-uzivatelskeho-rozhrani-s-knihovnou-prompt-toolkit-ovladaci-prvky-widgety/
20. Odkazy na Internetu
- blessed na PyPi
https://pypi.org/project/blessed/ - blessed na GitHubu
https://github.com/jquast/blessed - Blessed documentation!
https://blessed.readthedocs.io/en/latest/ - termbox-go na GitHubu
https://github.com/nsf/termbox-go - termui na GitHubu
https://github.com/gizak/termui - blessed na GitHubu
https://github.com/chjj/blessed - blessed-contrib na GitHubu
https://github.com/yaronn/blessed-contrib - tui-rs na GitHubu
https://github.com/fdehau/tui-rs - Operace s framebufferem na Raspberry Pi
https://www.root.cz/clanky/operace-s-framebufferem-na-raspberry-pi/ - Framebuffer na Raspberry Pi: vykreslování složitějších objektů
https://www.root.cz/clanky/framebuffer-na-raspberry-pi-vykreslovani-slozitejsich-objektu/ - 256 COLORS – CHEAT SHEET
https://jonasjacek.github.io/colors/ - Terminfo (Wikipedia)
https://en.wikipedia.org/wiki/Terminfo - Termcap (Wikipedia)
https://en.wikipedia.org/wiki/Termcap - Python 3's f-Strings: An Improved String Formatting Syntax (Guide)
https://realpython.com/python-f-strings/ - Top 20 Best ASCII Games on Linux System
https://www.ubuntupit.com/best-ascii-games-on-linux/ - 4 Python libraries for building great command-line user interfaces
https://opensource.com/article/17/5/4-practical-python-libraries - prompt_toolkit 2.0.3 na PyPi
https://pypi.org/project/prompt_toolkit/ - python-prompt-toolkit na GitHubu
https://github.com/jonathanslenders/python-prompt-toolkit - The GNU Readline Library
https://tiswww.case.edu/php/chet/readline/rltop.html - GNU Readline (Wikipedia)
https://en.wikipedia.org/wiki/GNU_Readline - readline — GNU readline interface (Python 3.x)
https://docs.python.org/3/library/readline.html - readline — GNU readline interface (Python 2.x)
https://docs.python.org/2/library/readline.html - GNU Readline Library – command line editing
https://tiswww.cwru.edu/php/chet/readline/readline.html - gnureadline 6.3.8 na PyPi
https://pypi.org/project/gnureadline/ - Editline Library (libedit)
http://thrysoee.dk/editline/ - Comparing Python Command-Line Parsing Libraries – Argparse, Docopt, and Click
https://realpython.com/comparing-python-command-line-parsing-libraries-argparse-docopt-click/ - IBM 2741
https://en.wikipedia.org/wiki/IBM_2741