[Python] Nuove funzioni per la gestione degli eventi di tastiera?

Manlio Perillo manlio.perillo a gmail.com
Lun 18 Feb 2019 16:04:42 CET


On Mon, Feb 18, 2019 at 1:52 PM Gabriele Battaglia <iz4apu a libero.it> wrote:
>
> [...]
> > Quello che ti serve di curses è:
> > https://docs.python.org/3.7/howto/curses.html#user-input
> > In particolare le funzioni getkey e getstr.
> >
> > Ecco un piccolo esempio:
> > https://pastebin.com/b0B0LbfC
> >
> > getkey la puoi implementare usando pyunput, ma la seconda è molto più complessa.
> >
> > Fai attenzione che curses **altera** come il terminale funziona
> > normalmente, quindi potresti vedere cose strane.
> > Francamente, sul mio sistema Linux non mi sembra che curses si
> > comporti come dichiarato nella documentazione...
> Infatti, molto strane.
> Dopo l'istruzione initsch() con cui si inizializza l'area di schermo del
> terminale, tutta la tecnologia di supporto (lettore di schermo della
> console) impazzisce.

Come temevo.
Avevo dimenticato che utilizzi il supporto per la lettura.

> Inutile rivolgersi a librerie così complesse che fanno così tante cose.
> A me serve qualcosa di piccolo e specifico, solo per la tastiera.
>

Purtroppo quello che vuoi fare **è** complesso.
Normalmente (quello che i sistemi UNIX chiamano modalità canonica), il
terminale quando legge l'input fa molte cose.

* quando premi il tasto Backspace, cancella l'ultimo carattere immesso
* quando premi il tasto freccia sinistra e destra, ti posiziona
all'interno del testo che stai immettendo
* ignora i caratteri speciali

Per questo motivo attende che l'utente premi il tasto Enter per
indicare che ha finito.
Per leggere un carattere alla volta devi rinunciare a tutto questo, e
reimplementarlo.

Ci sono un paio di soluzione che mi vengono in mente, ma sono tutte fragili.
Hai davvero bisogno di leggere un carattere alla volta?
Devi davvero gestire i carattere speciali come le freccie?

Prova a vedere se https://docs.python.org/3/library/cmd.html ti può servire.


Ciao
Manlio


Maggiori informazioni sulla lista Python