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

Manlio Perillo manlio.perillo a gmail.com
Lun 18 Feb 2019 11:38:09 CET


On Sun, Feb 17, 2019 at 10:25 PM Gabriele Battaglia <iz4apu a libero.it> wrote:
> [...]
> Ricordo che già tempo fa qualcuno ti aveva consigliato:
> https://pypi.org/project/pynput/
>
> Funziona con un modello a callback, che potrebbe o no essere il
> modello migliore per il tuo caso.
> C'è un esempio nella pagina che ho riportato, nella sezione
> Monitoring the keyboard.
>
> Ciao Manlio.
> Ho letto la guida qui: https://pynput.readthedocs.io/en/latest/keyboard.html
> L’avevo già letta tempo fa quando, come dici giustamente, questo modulo mi fu consigliato. Ma ora come allora, continuo a non capirlo. E’ troppo complesso per me, mi sfugge proprio il come funziona.
> Innanzitutto, cos’è un modello a callback?
>

https://it.wikipedia.org/wiki/Callback

> Io ho capito che va lanciato un listener della tastiera che apre un suo thread e si mette in ascolto. Ma poi, come leggo i tasti premuti?
> Come faccio a dire al listner, che in un determinato punto del programma mi aspetto che l’utente prema le 4 frecce, e, qualche riga più avanti, una “s” o una “n”?
>
> Mi servirebbe un esempio pratico, poter scambiare qualche mail con qualcuno che lo usa.
>

Se il tuo programma è ancora quello che avevi postato su Dropbox tempo
fa, allora ti consiglio di usare la libreria curses:
https://docs.python.org/3.7/howto/curses.html.

Purtroppo quel tutorial è obsoleto, dato che l' implementazioni
alternativa UniCurses sembra non sia più sviluppata.
Ignora anche il consiglio di usare il modulo Console.

Usa invece https://pypi.org/project/windows-curses, se sei su Windows.
Questa sembra sia aggiornata.

C'è una richiesta aperta di supportare curses anche su Windows nella
libreria standard, ma è ferma:
https://bugs.python.org/issue2889

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...

> Un’altra cosa, vedo riportato spesso negli esempi relativi a questo modulo, la parola chiave with. Ho provato a carecarne una spiegazione nella documentazione di Python ma temo di non aver avuto successo. Assieme a lambda, map e filter, sono cose che non mi è ancora capitato di studiare ma che dovrò affrontare quanto prima.
>

Inizia con il tutorial:
https://docs.python.org/3/tutorial/errors.html#predefined-clean-up-actions

poi passa al manuale di fiferimento:
https://docs.python.org/3/reference/compound_stmts.html#the-with-statement


Ciao
Manlio


Maggiori informazioni sulla lista Python