Text User Interface con Python - Lezione 00

Sembra un paradosso ma non tutte le interfacce grafiche sono con le classiche finestrelle a cui siamo abituati su Windows o Linux. Molti software, specialmente agli esordi dell'interazione uomo/macchina negli anni 80 che si affacciavano i primi software commerciali, erano realizzati mediante interfacce grafiche testuali, dove mouse e uso della tastiera erano fortemente spostati a favore del secondo. Vediamo un serie di lezioni per realizzare delle Text User Interface in Python.

Un classico software realizzato con interfaccia testuale TUI (Text User Interface) è come quello in figura sotto.

Risultati immagini per text user interface

Fortemente in voga al tempo del DOS, in realtà queste interfacce non hanno mai del tutto abbandonato i nostri pc, soprattutto tra gli utenti Linux e dei Server a vario titolo. Librerie grafiche per queste interfacce sono infatti molto semplici, richiedono schede video dalle prestazioni irrisorie, non occupano memoria ram se non in quantità limitatissime, non hanno criticità che possono bloccare un sistema produttivo, ideali per qualsiasi impiego quindi su calcolatori poco aggiornati o che è preferibile funzioni con continuità. Software realizzati con queste interfacce sono insospettabilmente ancora usati presso corrieri espresso, poste, banche. terminalini usati da magazzinieri o similari e spesso gli installer di altri software o driver . Vale la pena studiarne un po' di dinamiche e funzionamento. Le librerie principali per le TUI sono le Curses o le New Curses, disponibili in C e Python. Se cercate qualcosa di simile in Java, la libreria nativa Charva è quella che fa per voi in alternativa a jCurses. Vediamo le Curses in ambiente Python come funzionano con esempi ed esercizi.

Per i nostri esempi possiamo usare IDLE di Python su Linux o il classico IDE online Repl.it. sia versione Python che Python Tkinter.

Cominciamo col più classico degli Hello World con qualche elemento di utilità che ripeteremo abitualmente all'interno dei nostri script.

import curses
schermo = curses.initscr()
curses.noecho() #non visualizza il carattere digitato
curses.cbreak() #ad ogni input non chiede premere invio
schermo.keypad(1) #abilita i caratter speciali

schermo.addstr(25,50,"Hello World", curses.A_BOLD)
schermo.refresh()

Come si può capire, aggiungere un testo in punto dello schermo y:25, x: 50 (un po' controintuitivo rispetto alla notazione geometrica), partendo dal bordo in alto a sinistra, è semplice. Possiamo poi aggiungere, in modo opzionale, una proprietà tra le seguenti:

A_BLINK Testo lampeggiante
A_BOLD Grassetto
A_DIM Testo oscurato
A_REVERSE Testo in negativo
A_STANDOUT Contrasto elevato b/n
A_UNDERLINE Sottolineato

Aggiungiamo ora qualche elemento cromatico. Curses basa il proprio sistema di colore su 8, si ahimè, 8 colori, per una retro-compatibilità con le vecchie architetture hardware. Ma per definirli si deve sempre dare una coppia COLORE SFONDO/COLORE PRIMO PIANO. Modifichiamo il precedente frammento aggiungendo un testo con del codice per renderlo rosso su sfondo bianco similarmente alla precedente immagine introduttiva.

curses.start_color()
curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE)
schermo.addstr(30,50, "WARNING!", curses.color_pair(1) )

Il codice è abbastanza intuitivo, si comincia una tantum la modalità colore, si definisce una combinazione colori e quindi si procede a scrivere il testo. In un programma più complesso, i colori potrebbero essere dichiarati all'inizio dell'applicativo per essere poi usati al momento opportuno.

Provate un po' di esperimenti tra colori e posizioni a schermo per vedere come si comporta la stampa a video. Provate a centrare o allineare diverse scritte.

I colori che avete a disposizione sono i seguenti:

  • COLOR_BLACK
  • COLOR_BLUE
  • COLOR_CYAN
  • COLOR_GREEN
  • COLOR_MAGENTA
  • COLOR_RED
  • COLOR_YELLOW
  • COLOR_WHITE