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

Gabriele Battaglia iz4apu a libero.it
Lun 18 Feb 2019 13:52:17 CET


Reply to the Manlio Perillo's message, wrote on 18/02/2019 at 11:38:
> 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
Ciao Manlio. Ok, ora è più chiaro.

> 
>> 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...
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.
Win curses, almeno in ambiente Windows, mi risulta completamente 
inutilizzabile, ci avevo già provato tempo fa. Sarebbe ottimo se potessi 
importare solo quelle 2 funzioni per gli eventi di tastiera lasciando 
stare tutto il resto, ma se non chiamo l'inizializzazione initsch(), non 
posso usarne i moduli. Inoltre, avevo notato che, una volta 
inizializzata, in caso di uscita a per un errore, il terminale diventa 
ingestibile, come se rimanesse a metà fra la sua modalità normale e 
quella di wincurses; probabilmente alcuni thread non escono con l'errore 
e continuano a fare casino.
Inutile rivolgersi a librerie così complesse che fanno così tante cose. 
A me serve qualcosa di piccolo e specifico, solo per la tastiera.

Grazie per gli altri link, li ho letti tutti.

Gabriele.


Maggiori informazioni sulla lista Python