Profilo di trescon

Nome trescon
Indirizzo email python.alby@gmail.com
AvatarAvatar utenti
Messaggi220
Firma forum
------
Alberto
  • Re: Instanziare la classe...
    Forum >> Programmazione Python >> GUI
    Ciao @trescon




    Precisa bene l'environment della domanda : la classe "database" che stai cercando di fare è un oggetto dati oppure una finestra per la gestione dei dati?




    Chiedo questo perché sarebbero oggetti con caratteristiche diverse ... oddio, fondamentalmente sempre oggetti, ma una finestra richiede alcuni accorgimenti particolari generati dal mainloop e dagli eventi cui deve rispondere.

    Ciao Giuseppe la classe database servirebbe per fare delle ricerche in base ad alcuni dati ricevuti a schermo dalla classe Finestra; i risultati dovrebbero poi essere visualizzati dalla classe Finestra.

    Spero di essere stato chiaro




    Grazie




    Alberto
    ------
    Alberto
  • Instanziare la classe...
    Forum >> Programmazione Python >> GUI
    Buonasera, nel tentativo di approfondire le classi sto usando due classi principali , una che crea anche l'interfaccia grafica e una per l'accesso al db.
    La prima è cosi creata :




    class Finestra(tk.Tk):
        def __init__(self, *args,**kwargs) -> None:
            super().__init__(*args,**kwargs)
    
    ...
    ...
    ..
    ..
    ...
    if __name__== '__main__':
        princ = Finestra()
        princ.mainloop()
    
    La seconda è una normale classe per leggere/scrivere il DB.




    class Database_fede():
    
    ...
    ...
    ...
    DB Fede = Database_fede()
    Ecco io dovrei passare dei dati dalla prima classe alla seconda per fare delle ricerche.




    Se instanzio la classe Finestra() come farei di solito :




    Fin = Finestra()




    riesco a passare tranquillamente i per la ricerca sul db solo che mi viene creata l'interfaccia grafica doppia; se non faccio questa instanziazione (Fin = Finestra()) come posso identificare nella classe db che faccio riferimento a delle variabili che "provengono" dalla classe Finestra().




    Un grazie a chi volesse aiutarmi.




    Alberto
    ------
    Alberto
  • Compilazione file pdf
    Forum >> Principianti
    Buongiorno a tutti, e rieccomi con un altra richiesta di chiarimenti.



    Io avrei necessità di creare un file pdf di un cartellino descrittivo con una certa grafica (carina) e poi di compilarne i campi con dati prelevati da un db.

    Qualcuno sa indicarmi come posso fare ? Con che strumenti ?

    Io ho già usato con soddisfazione fpdf2 ma creavo un pdf da zero con con una grafica tabellare (quindi grezza) ; ma se io volessi compilare un cartellino nelle proprie righe create con qualche programma che poi mi permetta di compilarle ??




    Spero di essermi spiegato.




    Grazie anticipato a chi mi potrà rispondere.



    ------
    Alberto
  • Re: Calendario grafico con scadenze
    Forum >> Principianti
    Tieni conto che a me interessa visualizzare il codice, il numero della promo, le date, il marchio e il prezzo al pubblico

    Dimenticavo... i dati io li lavorerò partendo da un archivio in Sqlire3 creato con il set di dati che hai visto che importerò dopo conversione excel-csv; causa controlli vari da effettuare prima di avere un archivio finito (il quale sarà la somma di tutte le promo arrivate gg x gg nell'anno).
    Mediamente poi le righe saranno 50/60000 nel db che però verranno usate per gruppi di date.

    Spero di non confondere troppo le idee.


    --- Ultima modifica di trescon in data 2025-05-29 21:11:12 ---
    ------
    Alberto
  • Re: Calendario grafico con scadenze
    Forum >> Principianti
    beh, ovviamente il discorso può variare in base ai dati da rappresentare ma di per se è possibile realizzarlo in molti modi.

    Uno dei più semplici che mi viene in mente è quello di sfruttare il gestore "grid" per generare un header tipo "codice|descrizione!01|02|..." e quindi sfruttare rowspan nel configurare le celle di codice e descrizione in rapporto al numero di offerte da rappresentare per articolo, mentre ilo metodo colspan permetterebbe di unificare le celle dei giorni in cui ricade una singola offerta. delle label diversamente colorate evidenzierebbero i periodi delle offerte, magari corredati da una brevissima descrizione.




    Potrebbe anche utilizzarsi un canvas per "disegnare" le cose ma sarebbe un attimino più articolato.

    Volendo potrebbe anche realizzarsi un mix di metodologie ibride.




    In ogni caso dovresti decidere "cosa" vuoi per davvero visualizzare e valutare le dimensioni necessarie alla rappresentazione prima ancora di iniziare una implementazione, quantità di dati eccedenti lo schermo comportano approcci diversi da quantità per cui una schermata è sufficiente.




    Nel caso Tu ritenga di provare qui qualche bozza proponi un set di dati su cui ragionare che vediamo cosa si riesce ad escogitare.




    Ciao

    Buonasera, allora ecco un set di dati (chiaramente taroccati) su cui ragionare.

    Nelle ultime righe cambiando le date per avere più intersezioni excel non ne ha voluti di lasciarmi il trattino e mi ha messo lo slash.

    I campi che io ricevo sono questi, il numero di righe sono decine di migliaia.

    Io vorrei poter visualizzare per ogni referenza (codice) tutte le date iniziali e finali della durata di ogni singola promo; come inizio per capire mi va bene anche che ogni promo per lo stesso articolo venga visualizzata con una barra diversa (raggruppando le promo per lo stesso codice su barre vicine tra loro)

    Spero di essere stato chiaro.

    Lo scopo è vedere la durata della promo su una tavolozza di calendario e vedere se poi per lo stesso articolo alla fine della prima c'è una promo di proseguimento (magari con prezzi diversi)




    Capisco che l'argomento a chi non ne ha a che fare possa sembrare "stupido" ma ormai si lavora cosi....




    Grazie per la pazienza



    ------
    Alberto
  • Calendario grafico con scadenze
    Forum >> Principianti
    Bongiorno, sto valutando come creare una visualizzazione a barre orizzontali (con sviluppo orizzontale mensile) che mi visualizza per ogni articolo l'inizio e la fine di una tal promo visualizzando anche le sovrapposizioni di date (magari una inizia prima che finisca l'altra).
    Dovrebbe anche mettere in coda sulla stessa "barra" tutte le promozioni con lo stesso codice articolo (perché non vengono tutte comunicate assieme, ne arrivano tutti i giorni).

    Quello che chiedo è qualche suggerimento per poter realizzare ciò ; poi cercherò di svilupparlo.

    Premetto che i dati vanno estrapolati da file ricevuto in .csv di circa 10/12.000 righe.


    Pensavo di creare con canvas lo "specchietto dei 31 gg" con dei rettangoli verticali che poi si intersecano con le barre del prodotti evidenziando la durata, ... potrebbe essere o è una cavolata?

    Poi devo valutare come fare in modo che tutte le promo per lo stesso articolo vengano visualizzare sulla stessa barra una di seguito all'altra.


    Come si capisce non so bene come partire per non arenarmi subito sulla strada sbagliata.


    Avete vogli di darmi qualche dritta.... ?



    Grazie
    ------
    Alberto
  • Le classi queste sconosciute
    Forum >> Principianti
    Buonasera, per quanto io ci stia provando ... finisco sempre per litigare quando cerco di usare le classi; porto un esempio di errore che non capisco.
    L'errore che mi visualizza l'interprete è:




    return self.func(*args)


    self.file_modificati.append(self.record_new) # line 118, in converti_data_promo

    ^^^^^^^^^^^^^^^^^^^^

    File "C:\Users\AlbertoAppData\Local\Programs\Python\Python312\Lib\tkinter\__init__.py", line 2425, in __getattr__

    return getattr(self.tk, attr)

    ^^^^^^^^^^^^^^^^^^^^^^

    AttributeError: '_tkinter.tkapp' object has no attribute 'file_modificati'




    Mi potete chiarire le idee ?

    Grazie

    class Conversione_date:
        def __init__(self):
        
            self.file_modificati = []
            self.file_modificati_giornalieri = []
            
        def converti_data_promo(self):
            # qui ci sono scariate riche di codice che non utilizzano le variabili "inquisite"
            if self.file_cambio_data.startswith("promo"):
                self.file_modificati_giornalieri.append(self.record_new)
            else:
    118         self.file_modificati.append(self.record_new)


    ------
    Alberto
  • Re: Individuare files dei fonts
    Forum >> Programmazione Python >> Files e Directory
    I miei saluti.
    A scopo meramente ludico mi sto studiando la libreria fpdf2, finalizzando alla produzione di moduli tabellari con font e stili scelti dall'utente, la scelta dei fonts avviene per "famiglie" di font selezionate in ambiente tkinter.
    Nell'approccio con fpdf2 ho constatato che, necessariamente, deve essere fornito "il file" da utilizzare per la composizione dei testi, specifico per lo stile di testo applicato, essendo la libreria non in grado di operare con la generica fornitura di font-family e style.
    Ho, pertanto, iniziato a studiarmi una metodologia per identificare files di font soddisfacenti le scelte utente tra quelli registrati nel sistema, correntemente nel solo linux ma che spero, in seguito, di ampliare anche al mondo windows. Al momento provvedo ad estrarre l'intero set di font rilevati nel sistema tramite fc-list (ho trovato scoraggianti fc-match e fcpatterformat non conoscendo i parametri da applicare di volta in volta) in un subprocess e, quindi, utilizzando il modulo python "fontmeta" per estrarne i metadati e selezionare i file tramite i campi "font_family" e "subfamily"
    ... certamente l'utilizzo di "fontmeta" non è il massimo, limitando i caratteri gestibili ai soli TrueType ed OpenType ma bene o male può andare, in genere i caratteri di altra codifica (p.e. i Type1) hanno corrispondenze in una delle due tipologie, anche se alcuni, tipo il "Gargi" in esempio sotto
    ...
    font_family            : गार्गी
    subfamily              : गार्गी
    unique_font_identifier : FontForge : Gargi_1.10v : 12-3-2012
    full_font_name         : Gargi
    version                : Version 2.0 
    postscript_name        : Gargi
    ...
    non so proprio come intercettarli, dato i caratteri "esotici" utilizzati nel compilare a detti campi.

    Comunque, pur ritenendo tutto sommato veniali le problematiche sopra esposte, mi sono imbattuto in alcune casistiche che mi lasciano perplesso circa le metodologie che sto implementando.

    La prima : le "famiglie" di font solitamente sono definite con file specifici per i caratteri "normale", "grassetto", "corsivo" e "grassetto-corsivo", detti stili son definiti nel campo "subfamily" MA NON HANNO una indicazione uniforme, tanto meno mi è riuscito di trovare una specifica delle definizioni.
    Al momento, ho definito un insieme di variabili globali
    NORMAL = ['Regular', 'Normal', 'Roman', 'Book']
    BOLD = ['Bold','Gras']
    ITALIC = ['Italic', 'Italique', 'Oblique']
    
    
    di appoggio che però non sono esaustive, alcune delle definizioni trovate non ho neanche saputo ove porle.
    Qui viene la prima domanda: qualcuno di Voi conosce e saprebbe indicarmi una specifica esaustiva per gli stili di testo? ... o almeno suggerire delle integrazioni?

    Altra problematica è data dai file stessi, sul mio sistema (ubuntu con aggiornamenti dalla versione 16 alla 22) coesistono versioni multiple di file con della stessa "famiglia" e stile, sparsi in varie directory, di sistema o locali all'user, rispondenti ad una ricerca ... certo, posso applicare il primo trovato od anche utilizzare le directory di sistema, anche se in esse sono presenti più file soddisfacenti contemporaneamente i requisiti (tipo i fonts Microsoft)
    La seconda domanda è : qualcuno conosce l'argomento e saprebbe indicarmi la documentaione da consultare (sperando non sia troppo "laboriosa") e/o suggerimenti?
    Per eventuali interessati, il modulo di lavoro sviluppato al momento (work.py) è il seguente:
    # -*- coding: utf-8 -*-
    
    import subprocess
    from fontmeta import FontMeta
    
    NORMAL = ['Regular', 'Normal', 'Roman', 'Book']
    BOLD = ['Bold','Gras']
    ITALIC = ['Italic', 'Italique', 'Oblique']
    
    def get_fonts_linux_system() -> list:
        ''' Estrae i fonts registrati in un sistema linux '''
        p = subprocess.check_output('fc-list', stderr=subprocess.STDOUT)
        fonts_data = p.decode('UTF-8').splitlines()
        fonts = []
        for f in fonts_data:
            f_name = f.split(':')[0]
            fonts.append(f_name)
        fonts.sort()
        return fonts
    
    def get_data_file(fname: str) -> dict:
        ''' Estrae i metadati di un file TrueType o OpenType '''
        data = None
        try:
            fm_i = FontMeta(fname)
            data = fm_i.get_data()
        except:
            pass
        return data
    
    def get_from_family(fam: str, style: bool=False,
                        bold: bool=False, italic: bool=False) -> list:
        ''' Estrae i font registrati con famiglia e stile selezionati '''
        fonts = get_fonts_linux_system()
        founds = []
        for f in fonts:
            fname = f.rstrip('\n')
            try:
                fm_i = FontMeta(fname)
                data = fm_i.get_data()
                if data['font_family'] == fam:
                    passed = False
                    if style:
                        stl = data['subfamily']
                        if not bold and not italic:
                            if stl in NORMAL: passed = True
                        elif bold and italic:
                            st = stl.split()
                            if (len(st) == 2 and (st[0] in BOLD or st[0] in ITALIC)
                                and (st[1] in BOLD or st[1] in ITALIC)):
                                passed = True
                        else:
                            if bold:
                                if stl in BOLD: passed = True
                            elif italic:
                                if stl in ITALIC: passed = True
                    else:
                        passed = True
                    if passed: founds.append(f)                        
            except:
                pass
        return founds
    e funziona con la funzione "get_from_family" che richiede l'elenco dei file a "get_fonts_linux_system" per poi processarli singolarmente richiedendo, per ciascuno di essi, i metadati a "get_data_file" per poi valutarne i metadati in base alle opzioni passate quali parametri.

    ... se qualcuno è interessato alla finestra (tkinter) di test lo faccia sapere che la posto, sono circa 280 righe di codice e non ho ritenuto fosse al momento necessaria.

    Grazie dell'attenzione

    Ciao Nuzzopioppo, sempre una fonte di approfondimento. Per fortuna che tu sei quello che in una mailing LIST potrebbe essere di “impaccio” …… pensa a chi sta peggio di te che rompi che sarebbe.

    Saluti ancora e grazie per tutte le info che ci dai




    Alberto
    ------
    Alberto
  • Re: stampare un codice a barre su stampante termica raspberry pi
    Forum >> Programmazione Python >> Files e Directory
    Soggerisco magari una cosa già fatta... e se stampi il Qrcode in pdf e solo poi stampi il file sulla termica ?



    Vietato prendermi a parolacce ...... :fingers-crossed:
    ------
    Alberto
  • Confrontare date con Sqlite
    Forum >> Programmazione Python >> Database
    Buongiorno a tutti, ogni tanto torno con qualche "problema"; quelle di oggi coinvolge il confronto fra date.
    Io ho un archivio che mi viene fornito che ha la date cosi composte: 07/09/2024.

    Nelle varie funzioni di confronto x query ho visto esempi solo con date: 2024-09-07

    Come potrei fare il confronto con le date fornite ? Dovrei scomporre la data e ricomporla all'americana per poi fare il confronto ?

    O sarebbe meglio rilavorare tutto il file .csv convertendo tutte le date e poi in un secondo tempo eseguire la query di confronto ?

    Il file di compone di 16 colonne per un minimo di almeno 50.000 righe con possibilità di arrivo alle 70/80.000.


    Come potrei ottimizzare al meglio la scrematura per un range di date ?


    Grazie

    ------
    Alberto