On Wed, Jul 25, 2018 at 1:59 PM Gabriele Battaglia <iz4...@libero.it> wrote: > > Reply to the Manlio Perillo's message, wrote on 25/07/2018 at 13:13: > [...] > > Ottimo. > > Allora dimentica tutto il resto che ho scritto e posta il codice su un > > pastebin o su gist se hai un account github. > > Cerca di eliminare tutte le parti che non sono necessarie. > Ciao Manlio. > Siccome sono pigro, io provo così, se poi, per qualche ragione tecnica > non andasse bene, mi faccio l'account su github e te lo riposto là, > fammi sapere se così va bene. > > Premessa: il modulo key.py che scarichi contiene 2 funzioni, guarda solo > la key() e non la dgt(), di cui, eventualmente, mi occuperò in seguito. > > https://www.dropbox.com/s/195yfm2dpx407s2/key.py?dl=0 > > Per migrarla su Python3, l'avevo corretta così: > > https://www.dropbox.com/s/mvcrhyglml2tg1d/key3.py?dl=0 > > Ma senza successo. >
Perchè setti stdin in modalità non blocking? Se elimini quel codice, il programma funziona, sia key.py che key3.py > > > >> [...] > >> > >>> Che cosa vuoi fare? Intercettare la pressione dei tasti da tastiera a > >>> basso livello, o semplicemente leggere un carattere alla volta dalla > >>> tastiera senza che l'utente premi INVIO? > >> Principalmente la seconda che dici. In pratica mi serve che determinate > >> azioni partano quando io premo dei tasti, senza aspettare l'invio, che > >> toglie immediatezza alla cosa. Questo è importante quando scrivo dei > >> piccoli giochi, o quando la pressione dei tasti serve a compiere azioni > >> che si ripetono spesso. > >> Sarebbe bello poter fare quello che permette il modulo keyboard di > >> pygame che provvede un array nel quale, per ogni tasto, ritorna un flag > >> booleano quando il tasto viene premuto ed un altro quando viene > >> rilasciato; > > > > Come controlli questo array mentre "fai qualcos'altro"? > > > Semplice: il corpo principale del programma è compreso in un ciclo > while: ad ogni ciclo, una serie di if ed elif controllano se un certo > tasto è premuto e se sì, chiamo una subroutine che lavora e poi riporta > a false il flag del tasto premuto e ritorna al ciclo principale. > Gli eventi da tastiera in questo modo vengono verificati all'inverso, > cioè non è l'evento che scatena l'azione ma è il programma main che > direttamente controlla se si è verificato un evento. So che non è > elegante dal punto di vista del bravo coder, ma non ho trovato altre > soluzioni. > Non sono sicuro di capire, ma se quello che vuoi fare è la funzione dgt, allora secondo me ti stai complicando la vita. Innanzitutto il programma fa una sola cosa alla volta: o legge un carattere da tastiera o processa il carattere. Il secondo problema è che dgt è inutilmente complicata. Implementa 3 funzioni separate: parse_string, parse_int e parse_float, ed in ciascuna funzione in un ciclo while chiama la funzione key. > > Comunque non dovrebbe essere difficile emulare questa API, usando pyunput. > > Se vedi > > https://pythonhosted.org/pynput/keyboard.html#monitoring-the-keyboard, > > ti basta che nelle callback on_press ed on_release setti i flag > > appropriati. > > Ciascuna callback ha come parametro il codice del tasto premuto. > > > Ok Manlio, provo a fare qualche test. > No, lascia perdere. Se devi fare il parsing, l'API attuale è la più semplice. Con le callback è un bagno di sangue. Ciao Manlio _______________________________________________ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python