Forum >> Principianti >> Presentazione + richiesta di suggerimenti

Pagina: 1

Buongiorno a tutti, mi chiamo Andrea e ho iniziato a programmare in python da due settimane. Ho acquistato un raspberry pi2 B ma ho iniziato con python su WXP con la versione 2.7.
Ringrazio in anticipo chi mi aiuterà. Il programma che ho scritto è molto semplice in quanto non deve fare niente di particolare. C'è una semplice interfaccia grafica con due pulsanti e due label. Il programma deve ricevere dati via seriale che vengono spediti da un cubloc ogni 400 ms a prescindere dal fatto che il raspberry sia acceso o meno (il raspberry è una nuova implementazione di qualcosa già esistente).
Allego il programma che ho scritto e per il quale chiedo aiuto. I problemi che incontro sono i seguenti:
quando premo il pulsante di comunicazione se manca la riga con "print" il programma si blocca senza errori ed esce la scritta "(non risponde)" sulla barra superiore;
con la riga "print" il programma funziona ma lentamente;
con la riga "sleep" il programma si blocca come sopra.
Eventualmente c'è la possibilità di gestire un interrupt all'arrivo di un dato seriale per evitare il while?
Un'altra necessità che ho, sarebbe la possibilità di aumentare la dimensione del carattere delle label, in quanto sul display da 7" del raspberry sono quasi illeggibili.
Grazie ancora a tutti e ricordatevi che ho iniziato da poco...
Andrea
Allegati
Il problema del blocco è dovuto al fatto che il ciclo while non molla più il controllo al mainloop della GUI, pertanto la finestra non è più in grado di gestire gli eventi e diventa non responsiva. I gestori degli eventi, come quelli che reagiscono al click sui pulsanti, dovrebbero terminare sempre nel più breve tempo possibile.

Avere un evento interrupt seriale sarebbe utile, ma non credo sia fattibile in modo semplice. Però si può scrivere un gestore evento temporizzato periodico di poche decine di millisecondi, lanciato e rilanciato con .after(millisecondi, gestore), e dentro questo evento controllare con il metodo .inWaiting() della porta seriale se sono arrivati byte e solo in quel caso leggerli con .read()

Problema successivo: sincronizzarsi con i dati cubloc che arrivano in modo totalmente asincrono rispetto al polling della GUI.


*** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione ***
Grazie per la risposta anche se non ci ho capito molto. In ogni caso vedo di andarmi a cercare le funzioni che hai nominato. Al massimo, riscrivo...
I tuoi suggerimenti mi sono stati molto utili. Programma modificato e completamente funzionante. Adesso alla pressione del tasto, chiamo una funzione che fa partire l'after, però, il ritardo tra il "click" e il cambio di colore, rimane; se tolgo la chiamata after invece è immediato.
Sai perché?
Sai perché?

No
*** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione ***
Ok, ho risolto tutti i miei problemi. Ormai non mi ferma più nessuno...
Ho però un'ultima (spero...) domanda da farvi: dal momento che i programmi che ho fatto andranno su raspberry con il proprio LCD (quello fatto apposta), quando dovrò scrivere negli "Entry", apparirà una tastiera come sui telefoni?
Ok, ho risolto tutti i miei problemi. Ormai non mi ferma più nessuno...
Ho però un'ultima (spero...) domanda da farvi: dal momento che i programmi che ho fatto andranno su raspberry con il proprio LCD (quello fatto apposta), quando dovrò scrivere negli "Entry", apparirà una tastiera come sui telefoni?

Bella domanda, quando lo scopri diccelo. ;)

Cya


Pagina: 1



Esegui il login per scrivere una risposta.