[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