Profilo di trescon

Nome trescon
Indirizzo email python.alby@gmail.com
AvatarAvatar utenti
Messaggi210
Firma forum
------
Alberto
  • Re: sqlite3 in rete
    Forum >> Programmazione Python >> Database
    Non riesco a trovare esempi basici che mi itegrino tkinter con after o asyncio o i tread (non ho preclusioni) che mi permettano di usarlo come base di partenza per delle prove per poter capire come funzionano.
    E sto cercano non poco....



    ------
    Alberto
  • Re: sqlite3 in rete
    Forum >> Programmazione Python >> Database
    .... ho avuto un'idea ora .... e se io invece di avere un notifica facessi aggiornare la mia interfaccia costantemente ??? ogni 30/40 secondi ?? potrei avere dei blocchi ?? rallentamenti ??
    In pratica sostituire l'aggionramento che ora faccio io manualmente con un ciclo/timer ??? A cosa potrei andare in contro ??
    Potrei trovarmi a non riuscire ad usare l'interfaccia perchè l'aggiornamento è in corso ??
    Scusate se intervengo sulla domanda posta a @Daniele.


    Le due modalità che ti ho mostrato funzionano entrambe, non Ti vanno bene? Magari è l'uso delle classi che "ostacola"?

    In ogni caso, Ti segnalo che puoi anche utilizzare il metodo "after" (ci avevo già accennato) delle finestre tkinter per far si che un metodo/funzione richiami se stesso ogni tot di tempo restando nel ciclo idle di tkinter, con database consistenti o con reti intasate potrebbero succedere dei congelamenti temporanei della gui (motivo per il quale preferisco i thread), comunque potresti provare anche quello, magari Ti va bene.

    Quanto su ad integrazione di quanto prima fatto.




    Non di meno, pur considerando ottima l'indicazione di @Daniele, la "comunicazione remota" riproporrebbe in ogni caso il problema del refresh della finestra se la view fosse una finestra grafica, entrerebbero comunque in gioco i tempi necessari alla lettura dei dati ed alla comunicazione, temo.

    :)


    Ciao Nuzzopippo, i tuoi due suggerimento hanno due grossi ostacoli x me (per ora, perchè vorrei superarli) :

    1 - come dicevi tu "le classi", le ho usate ma non le conosco bene da potermene "fidare" , sicuramente farei qualcosa che faticherei molto a far funzionare.

    2- tu la fai semplice (giust'appunto tu) ma il codice che mi hai scritto anche nel primo esempio, contiene delle sintassi che non conosco e non ho mai visto (che però mi intrigano, perchè vorrei migliorare il mio Python che è molto basico... dovuto al poco tempo disponibile x approfondire e anche ad una vecchiaia che mettersi al pc per imparare qualcosa dopo 9 ore di pc al lavoro e in particolare dopo le 21:30 con il sonno e la stanchezza che incalzano.... non è facile imparare cose nuove)

    Quindi avendo esigenza di far funzionare il software cerco , sul subito, di NON rivoluzionare ciò che ho fatto e che funziona ma di integrarlo con quel che mi manca per renderlo operativo il prima possibile.

    I foglietti volanti in negozio ci stanno creando "casini" continui.

    Questo non vuol dire che non approfondirò i vostri suggerimenti, anzi c'è solo da imparare .... ma mi servono settimane se non mesi per capire.... ; vi chiedo comunque la cortesia di continuare, se possibile, a supportarmi senza pretesa che capisca tutto quello che mi suggerite.

    Scusate ma sono molto ignorante in python....

    Grazie
    ------
    Alberto
  • Re: sqlite3 in rete
    Forum >> Programmazione Python >> Database
    Daniele aka Palmux said @ 2024-02-29 18:22:04:
    Beh potresti avere ritardi nella scrittura, ma non credo altri disagi visti gli accessi esigui.

    Penserei di implementare un sistema un po' diverso, con il database trasparente per gli utenti. Si accederebbe solo la tua macchina, tramite magari un web-framework alla FastAPI (che è semplicissimo), ricevendo/esponendo/scrivendo le richieste poi dal/al DB. In questo modo potresti gestirti in maniera piuttosto semplice anche le code in entrata e non aver paura di qualche perdita accidentale.

    utenti <--> framework <--> database

    Però certo, capisco quello che stai pensando, se è una singola riga con 10 valori... beh beh beh disse la pecora, forse la fatica supera il gusto e lascerei il tutto come è adesso.

    Ma chissà, vedi tu quanto ti vuoi ancora divertire, sarebbe una cosa non necessaria, ma una scusa per imparare una cosa nuova.

    Cya

    Ciao Daniele, ho rivisto su tuo suggerimento questo post e sarei d'accordo con te se non fosse per tre motivi :




    1- la scrittura, lettura,modifica stato dei messaggi è tutto già funzionante (sono quasi 15 gg che lo testo, solo che quando mi inseriscono un nuovo messaggio mi avvisano perchè io lanci la rilettura del db dalla mia postazione, mi manca solo la notifica !!! :confused:)




    2 - il secondo motivo di disaccordo è che vorrei prima riuscire a fare andare tutto quello che ho fatto prima di imbarcarmi in altre procedure partendo da zero.




    3 - la mia macchina non è sempre accesa (se non ci sono è spenta), e quindi il sistema non funzionerebbe.




    .... ho avuto un'idea ora .... e se io invece di avere un notifica facessi aggiornare la mia interfaccia costantemente ??? ogni 30/40 secondi ?? potrei avere dei blocchi ?? rallentamenti ??

    In pratica sostituire l'aggionramento che ora faccio io manualmente con un ciclo/timer ??? A cosa potrei andare in contro ??

    Potrei trovarmi a non riuscire ad usare l'interfaccia perchè l'aggiornamento è in corso ??




    Intanto grazie









    ------
    Alberto
  • Re: sqlite3 in rete
    Forum >> Programmazione Python >> Database
    ... troppo sofisticato x me (almeno a prima vista); appena ho un attimo lo studiero attentamente ed eventualmente ti chiedero' lumi.
    Fermo restando che sono a Tua disposizione per quel che posso, ciò che scrivi probabilmente denuncia una qualche pecca nella mia capacità di esposizione, essendo la mia conoscenza tutt'altro che sofisticata ... in fondo, la mia partecipazione ai post's è anche motivata proprio dal bisogno di "carpire" idee e tecniche che non conosco ancora.

    Digerisci tranquillamente il codice con calma, poi, se e quando Lo riterrai se ne discute, son certo che si può far di meglio, magari discutendone lo scopriamo assieme il "come".




    Ciao :)


    Ciao, finchè digerisco il tuo esempio (che però ho cominciato a mangiare da poco poco), avevo cominciato a fare esperimenti con asyncio.

    Ho provato a inserire un esempio preso da un sito e adattato alle mie esigenze di prova; ho provato a inserirlo nel programma che sto facendo, inserendo il comando per lanciare la routine asyncio sia prima che si avvii la root di tkinter sia (chiaramente ho tolto la prima) dentro la stessa .... e non cambia nulla.

    Praticamente mi parte a routine di asyncio ma il resto del programma (tkinter) di avvia solo dopo che la routine asyncio finisce ...... ma non dovrebbe andare in contemporanea (anche se non realmente in parallelo) ?

    Allego lo stupidissimo esempio usato :

    async def controlla():
    	for i in range(1, 30):
            print(f"conta: {i}")
            await asyncio.sleep(1)
    
    async def main():
    	task = asyncio.create_task(controlla())
    	await task
    



    asyncio.run(main())
    Io pensavo (perchè non conosco ancora asyncio) che mentre io utilizzavo l'interfaccia tkinter, in contempornea mi avanzava il contatore.

    Anche perchè il db dei messaggi io l'ho già fatto e lo leggo , scrivo , descimino i messaggi letto/non letto , ma non riesco a far girare una routine contemporanea per notificarmi i messaggi nuovi.

    Spero di essere stato chiaro e scusare il pippone
    ------
    Alberto
  • Re: sqlite3 in rete
    Forum >> Programmazione Python >> Database
    Ciao Nuzzopippo, se non ti è di troppo disturbo ..... CERTO che accetto un esempio esemplificato. Sono settimane che sono fermo con il "progetto" perchè non riesco a trovare come incastrare Tkinter con una routine che interviene ogni 4-6 secondi.

    Disturbo?, no, nessun disturbo, anzi, mi permette di scrostare la ruggine dal mio cervello di pensionato.




    Non so se quello che Ti propongo sia un sistema di "pushing" del tipo indicato da @Palmux, è una metodologia che ho sviluppato nel corso del tempo per applicazioni che non richiedano aggiornamenti frenetici dei dati e si basa su di un oggetto singleton cui è possibile iscrivere dei metodi/funzioni di parti di una propria applicazione agente in thread separati in "gruppi" di osservatori che si scambiano messaggi (liste di dati in realtà) tra di loro.




    Puoi vedere qui l'esempio che Ti ho preparato, consiste in una finestra che espone dei messaggi non letti inseriti in un database SQLite3 minimale, più o meno sulla falsa riga di come indicato da @Daniele posts fa, i messaggi sono da inserire esternamente, in una shell SQLite nel caso.

    L'applicazione è composta da tre piccoli moduli, ognuno "specializzato" per un compito: comunicazione, lettura dati, esposizione e comando.

    L'interazione tra le parti avviene tramite i "messaggi", che ho provato a spiegare, spero mi sia riuscito di essere chiaro.




    Se ci sarà bisogno di chiarimenti, a disposizione, se riterrete, Tu e gli esperti, di farmi sapere cosa ne pensate mi farà piacere.

    Ciao :)


    Ciao Nuzzopippo, ho letto frugalmente (per ora) il tuo esempio e ho apprezzato il tuo " ... credo che l'essenziale sia tutto qui."

    Mi rendo conto che sono indietro "anni Luce" con la conoscenza di Python.

    Il tuo esempio è un portento a penso che lo capiro' tra qualche mese.... troppo sofisticato x me (almeno a prima vista); appena ho un attimo lo studiero attentamente ed eventualmente ti chiedero' lumi.

    Grazie ancora per il lavorone che hai fatto x imbastirlo.



    ------
    Alberto
  • Re: sqlite3 in rete
    Forum >> Programmazione Python >> Database
    Ciao, il mio problema ora è di far convivere nello stesso script l'interfaccia tkinter (che so essere task monopolizzate) e la routine che devo eseguire ogni 30/60 secondi per vedere se ci sono messaggi nuovi.
    Come posso fare a far eseguire il task per la verifica finchè ho l'interfaccia tkinter in esecuzione ?
    I Miei saluti.




    Segnalo che venerdì scorso, ad un mio tentativo (piuttosto voluminoso) di rispondere al quesito soprastante, si è avuta una anomalia che ha creato un riferimento senza titolo ed a me intestato nella sezione "database", non accessibile e visibile alla pagina di riepilogo delle sezioni, questo perché possano, eventualmente, prendersi provvedimenti inerenti.




    Per il problema di @trescon, provo s rispondere ora in maniera succinta.

    Hai diverse metodologie a disposizione, la più "immediata" (e forse problematica) è di creare un metodo/funzione che richiami ricorsivamente se stessa ogni tot di tempo utilizzando il metodo "after" delle finestre tkinter.

    Personalmente evito di utilizzare la metodologia sopra, nel tempo ho preso l'abitudine, per situazioni non critiche, di utilizzare thread in parallelo, con un protocolli di comunicazione utilizzanti il pattern observer ed un intermediario di tipo singleton per lo smistamento delle comunicazioni, di norma senza l'uso di queue (dato che parlo di sistemi non critici) ... ho cercato di esemplificare in dettaglio ma sono intervenuti i problemi su detti.

    Se ritieni Ti bisogni un esempio di tal genere fai sapere che cercherò di implementare un esempio minimale a Tuo uso e vedrò di spiegarlo altrove e poi vedo di renderlo disponibile.




    Ciao


    Ciao Nuzzopippo, se non ti è di troppo disturbo ..... CERTO che accetto un esempio esemplificato. Sono settimane che sono fermo con il "progetto" perchè non riesco a trovare come incastrare Tkinter con una routine che interviene ogni 4-6 secondi.

    Grazie

    Ciao



    ------
    Alberto
  • Re: sqlite3 in rete
    Forum >> Programmazione Python >> Database
    Daniele aka Palmux said @ 2024-04-05 08:56:53:
    Buonasera, da prove fatte sembre funzionare senza errori di accessi simultanei…. Ora il problema è diverso.
    Avendo il db che lavora in solitaria su un Nas, ora sorge il problema di avvisare l’utente destinatario dell’ultimo messaggio inviato al db. (Che è arrivato un nuovo messaggio x lui)

    Come posso fare ?

    Interrogare ogni tot secondi per verificare la presenza di messaggi nuovi da parte di tutte le postazioni coinvolte?

    Come posso fare a capire se il messaggio è nuovo ? Nei campi del db non è previsto un campo ora ma solo la data. (Dovrei fare un confronto con uno stato precedente ….)

    Grazie per i suggerimenti che riuscirete a darmi.
    Ciao caro, potresti creare uno mini script che verifica la presenza di nuovi messaggi ogni tot tempo e poi, non so come è composto il tuo enviroment, si potrebbe "pushare" chi di dovere con la notifica del nuovo messaggio, ma devi implementare un mini sistema di pushing o magari usare altri servizi già pronti all'uso. Ma forse si sta sparando al moscerino col fucile da elefanti, in effetti potresti fare come hai descritto, lasciare che ogni postazione controlli ogni tot di tempo se ci sono nuovi messaggi, tanto hai poche postazioni se ricordo bene.

    Per sapere se il messaggio è letto o meno guarda non impazzire, metti semplicemente uno status che una volta letto cambia lo stato del messaggio, identificando così se è letto o meno. Se non vuoi cambiare le tabelle attuali, aggiungine una con l'id del messaggio ed il suo status, che cambierai a seconda delle attività dell'utente. Metodo semplice ed efficace.

    Hai davvero diverse strade davanti a te, devi solo provare a vedere quella più facile da realizzare ed a liberare la fantasia.

    Buon divertimento e happy coding.


    Ciao, il mio problema ora è di far convivere nello stesso script l'interfaccia tkinter (che so essere task monopolizzate) e la routine che devo eseguire ogni 30/60 secondi per vedere se ci sono messaggi nuovi.

    Come posso fare a far eseguire il task per la verifica finchè ho l'interfaccia tkinter in esecuzione ?




    Grazie
    ------
    Alberto
  • Re: Installzione fpdf2
    Forum >> Programmazione Python >> GUI
    Ciao Nuzzopippo e grazie; io lo avevo immaginato perché cosi è riportato nelle documentazione ma perché io se in uno script importo la libreria fpdf ottengo l’errore che ho riportato ? Se io guardo i pacchetti installati vedo fpdp2 vers. 2.7.8. Installata …..allora perchè dell’errore ?

    Vuoi dire che nell'ambiente python con i pacchetti che hai indicato nel primo post l'errore lo ottieni quando esegui

    >>> from fpdf import FPDF
    
    
    ... se è così è molto strano, non dovrebbe succedere a meno che non sia stata in qualche modo corrotta l'installazione di fpdf2 o che Tu stia in un ambiente python diverso da quello che Ti da l'elenco di pacchetti esposto.

    Suggerirei di provare, nell'ambiente che Ti da quell'elenco di pacchetti di aprire una sessione python da terminale e provare a fare l'import manualmente dal prompt, se non Ti da errori, avrai l'indicazione che il problema sorge nel contesto di esecuzione (ambiente python diverso), se invece avrai errori copia l'intera sessione, compreso il traceback, e postala come codice, come ho fatto io, indicando il contesto con cui operi (s.o., eventuali IDE, altre notizie significative) perché si possa valutare

    ... certo, non è detto che noi si possa riprodurre il Tuo problema, ma almeno si potrà cercare di ragionarci su.




    Per altro, hai provato a crearti un venv "pulito", ad installarci li fpdf2 e provarne l'utilizzo in quel venv?




    Fai sapere, ciao


    Allora.... io ho provato a eseguire il programmino dall'idle di python e da un altro programma (Geany) e funziona regolale......... la prova che non funzionava l'avevo fatta con Thonny.

    Strano perchè io uso indifferentemente l'uno o l'altro e di solito non ho problemi...... sarei curioso di sapere perchè però succede questo; potrebbe capitarmi in altri contesti.

    Se qualcuno ha qualche suggerimento....

    Io nella cartella dove risiede il file di prova ho provato il comando "pip list" e laq libreria fpdf2 la vedo....... boh

    Grazie



    ------
    Alberto
  • Re: Installzione fpdf2
    Forum >> Programmazione Python >> GUI
    fpdf2 è un fork di fpdf, quando lo installi viene generato un modulo "fpdf" che è quello da importare per operare, considerando di installarlo in un virtusl rnvironment, nella cartella "xxx_venv/lib64/pythonx.xx/site-packages" verranno create DUE cartelle, una denominata "fpdf2-2.7.8.dist-info" che conterrà le informazioni generali sul pacchetto, l'altra denominata "fpdf" che conterrà i veri moduli da utilizzare.

    Pertanto, anche se in se il pacchetto è identificato quale "fpdf2" per utilizzare la libreria a livello operativo bisognerà utilizzare "fpdf" quale modulo, fpdf2 NON lo è ... tale import è indicato chiaramente nel tutorial e negli esempi.
    Un esempio di sessione in un mio venv che forse chiarirà meglio :
    NzP:~$ source firme_v/bin/activate
    (firme_v) NzP:~$ python -m pip list
    Package                 Version
    ----------------------- -------
    defusedxml              0.7.1
    FindSystemFontsFilename 0.2.0
    fontmeta                1.6.1
    fonttools               4.47.2
    fpdf2                   2.7.8
    freetype-py             2.4.0
    pillow                  10.2.0
    pip                     22.0.2
    setuptools              59.6.0
    uharfbuzz               0.39.0
    (firme_v) NzP:~$ python
    Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import fpdf2
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ModuleNotFoundError: No module named 'fpdf2'
    >>> import fpdf
    >>> fpdf.__version__
    '2.7.8'
    >>> from fpdf import FPDF
    >>> quit()
    (firme_v) NzP:~$
    come puoi vedere, pur essendo il "package" identificato quale fpdf2 esso non è un modulo, il modulo è "fpdf" ed ha la stessa versione ("2.7.8") del package.

    Ciao :)



    --- Ultima modifica di nuzzopippo in data 2024-04-05 07:23:38 ---
    Ciao Nuzzopippo e grazie; io lo avevo immaginato perché cosi è riportato nelle documentazione ma perché io se in uno script importo la libreria fpdf ottengo l’errore che ho riportato ? Se io guardo i pacchetti installati vedo fpdp2 vers. 2.7.8. Installata …..allora perchè dell’errore ?

    Grazie
    ------
    Alberto
  • Re: sqlite3 in rete
    Forum >> Programmazione Python >> Database
    Daniele aka Palmux said @ 2024-04-05 08:56:53:
    Buonasera, da prove fatte sembre funzionare senza errori di accessi simultanei…. Ora il problema è diverso.
    Avendo il db che lavora in solitaria su un Nas, ora sorge il problema di avvisare l’utente destinatario dell’ultimo messaggio inviato al db. (Che è arrivato un nuovo messaggio x lui)

    Come posso fare ?

    Interrogare ogni tot secondi per verificare la presenza di messaggi nuovi da parte di tutte le postazioni coinvolte?

    Come posso fare a capire se il messaggio è nuovo ? Nei campi del db non è previsto un campo ora ma solo la data. (Dovrei fare un confronto con uno stato precedente ….)

    Grazie per i suggerimenti che riuscirete a darmi.
    Ciao caro, potresti creare uno mini script che verifica la presenza di nuovi messaggi ogni tot tempo e poi, non so come è composto il tuo enviroment, si potrebbe "pushare" chi di dovere con la notifica del nuovo messaggio, ma devi implementare un mini sistema di pushing o magari usare altri servizi già pronti all'uso. Ma forse si sta sparando al moscerino col fucile da elefanti, in effetti potresti fare come hai descritto, lasciare che ogni postazione controlli ogni tot di tempo se ci sono nuovi messaggi, tanto hai poche postazioni se ricordo bene.

    Per sapere se il messaggio è letto o meno guarda non impazzire, metti semplicemente uno status che una volta letto cambia lo stato del messaggio, identificando così se è letto o meno. Se non vuoi cambiare le tabelle attuali, aggiungine una con l'id del messaggio ed il suo status, che cambierai a seconda delle attività dell'utente. Metodo semplice ed efficace.

    Hai davvero diverse strade davanti a te, devi solo provare a vedere quella più facile da realizzare ed a liberare la fantasia.

    Buon divertimento e happy coding.


    Grazie Daniele… anche perché se per caso le postazioni fanno delle interrogazioni contemporanee l’sqlite3 lo permette e non dovrebbe darmi errori/problemi ….. giusto.

    Grazie
    ------
    Alberto