Profilo di nuzzopippo

Nome nuzzopippo
Indirizzo email nuzzopippo@gmail.com
AvatarAvatar utenti
Messaggi35
Firma forum
Fatti non foste a viver come bruti...
  • Re: Apertura menu laterale
    Forum >> Principianti
    In pratica anche se metto una tempificazione o uno sleep per far bloccare l'apertura e poi allo scadere dello sleep riprende l'apertura del frame, quello che mi aspetto non si verifica. Quello che succede e che alla fine di tutto il ciclo appare il frame completamente aperto
    Ovviamente, se vuoi che venga prodotto un effetto "scenografico" devi aggiornare "la scena" a passetti ... nel codice sopra prova ad importare time e giocare con le dimensioni, modifica on_switch cosi:

        def on_switch(self):
            if self.f.grid_info():
                self.f.grid_remove()
                self.f['width'] = 10
            else:
                self.f.grid(row=0, column=0, sticky='wns')
                for i in range(25):
                    self.f['width'] = (i + 1) * 4
                    self.update()
                    time.sleep(0.04)
            self.update()
    a me funziona

    ... bada bene, però, con controlli interni al frame self.f le cose si complicano, studiati bene la docs relativa ai widget ed al gestore di geometria.

    Inoltre, tieni presente che nei tempi di "attesa" l'interfaccia in se è bloccata, non è un procedimento thread-safe.

    Fatti non foste a viver come bruti...
  • Re: Apertura menu laterale
    Forum >> Principianti
    Puoi "giocare" con il gestore di geometria che utilizzi, esempio con grid:

    import tkinter as tk
    
    class MyApp(tk.Tk):
        def __init__(self):
            super().__init__()
            self.f = tk.Frame(self, bg='red', width=100)
            self.f.grid(row=0, column=0, sticky='ns')
            f2 = tk.Frame(self, bg='green')
            f2.grid(row=0, column=1, sticky='nsew')
            b = tk.Button(self, text='Switch menu', command=self.on_switch)
            b.grid(row=1, column=0, columnspan=2, sticky='ew')
            self.grid_columnconfigure(1, weight=1)
            self.grid_rowconfigure(0, weight=1)
            self.geometry('300x200')
            self.f.grid_remove()
    
        def on_switch(self):
            if self.f.grid_info():
                self.f.grid_remove()
            else:
                self.f.grid(row=0, column=0, sticky='ns')
            self.update()
            
    if __name__ == '__main__':
        app = MyApp()
        app.mainloop()
    In questo esempio definisco due frame, uno rosso ed uno verde, in una finestra, e rimuovo il rosso dalla rappresentazione, nella funzione di callback verifico la condizione di rappresentazione del frame rosso e, a seconda dei casi, lo aggiungo o lo rimuovo, rendendolo di fatto visibile/invisibile.




    Se utilizzi il gestore pack, leggi la docs di unpack()




    Ciao

    Fatti non foste a viver come bruti...
  • Re: Comportamento della Classe
    Forum >> Principianti
    i libri che ho acquistato e letto (chiaramente non finiti) non mi danno tutte le informazioni necessarie per capire ...
    Tu avresti qualche testo/articolo da consigliarmi ? Per poter approfondire in modalità "rincoglionito" la comprensione delle classi; se possibile in ITALIANO...
    Capisco le Tue difficoltà, ci incappo spesso, son "duretto", vecchietto e non anglofono a mia volta.

    Temo di non essere uno dei più indicati a darTi suggerimenti in ambito "OOP & Python", la mia conoscenza della programmazione ad oggetti è "pratica" oltre che nata e cresciuta in ambito java, dal quale ho ereditato la stragrande maggioranza dei concetti, concetti sviluppati in un lasso di tempo lunghissimo e dei quali sto ancora adattando l'aderenza alle particolarità del python.
    Dei testi che hai indicato, ho trovato più volte buone opinioni sul Lutz, gli altri due non li conosco ... riguardo la OOP, rimanendo nell'ambito Java, vi è un testo italiano di Claudio De Sio che è stato il mio "enty-point" : Object Oriented && Java 5

    Comprai tale testo appena uscito tanti anni fa e lo trovai molto utile, credo che concettualmente sia molto valido, anche se rimane comunque tanto altro da approfondire, ora il De Sio ne rende disponibile il pdf, vale la pena di dargli una occhiata ... nell'ambito python devo, purtroppo, passare la palla ad altri utenti con migliori cognizioni delle mie, io mi sbatto parecchio sulla documentazione (tutta in inglese) per "rifinire" all'occorrenza i miei dubbi.




    - Edit - Mi è venuto in mente l'ottimo lavoro di traduzione del tutorial effettuato da @RicPol (grazie Ric), li lo scope delle variabili è trattato, leggiti l'intero capitolo 9, tratta delle classi e potrebbe esserTi utile, comunque, per quanto si legga, riflessione e prove sono sempre indispensabili


    In ogni caso, per quel che si può si è a disposizione circa "dubbi pratici" (teoricamente c'è molto da imparare), se non ci si aiuta tra vecchietti ... ;)

    Ciao



    --- Ultima modifica di nuzzopippo in data 2021-06-03 07:55:32 ---
    Fatti non foste a viver come bruti...
  • Re: Comportamento della Classe
    Forum >> Principianti
    Scusa, mi spieghi cosa ho combinato x avere 2 volte l'ultimo risultato in due chiamate diverse (se io le associo ad una variabile) ?

    class Dissolvenze:
        global a
        a=[]
        
        def __init__(self,fase):
            self.fase = fase
    
        
        def calcolo(self,stato,inizio,fine):
            self.stato = stato
    ...
    

    Perchè il valore di "al" e di "gi" .... sono uguali... non dovrebbero esserlo ... dove sta l'errore ?

    Nella modalità di dichiarazione di "a", a parte che la dichiari globale, la dichiari pure come variabile di classe, tal tipo di dichiarazione fa si che venga "manipolata" da tutte le istanze di oggetti "Dissolvenze" creati, ognuna di tali istanze ci appende i suoi dati.

    Se tale NON È il tuo obiettivo dovresti dichiararla quale variabile di istanza, p.e. nello __init__ come "self.a" ed utilizzarla come tale.




    Purtroppo, la OOP non è un argomento "leggero", andrebbe affrontata con il sussidio di un buon libro. Al momento penserei che dovresti acquisire informazioni circa lo scope (visibilità) delle variabili, oltre che approfondire sulle classi.




    Ciao :)

    Fatti non foste a viver come bruti...
  • Re: Comportamento della Classe
    Forum >> Principianti
    In questo invece chiedo come mai mi stampa anche un "none" seguendo il codice :
    Il "fenomeno" è la modalità normale di funzionamento delle funzioni (o dei metodi), se non vi è una istruzione return esplicita viene comunque restituito None, guarda il 3° paragrafo nella docs in link.




    Nel Tuo metodo "calcolo" della classe "Dissolvenze" non hai definito alcuna istruzione "return", quindi la print esterna alla classe, correttamente, stampa ciò che viene restituito : None




    Per altro, analizza meglio ciò che vuoi fare, se vuoi stampare esternamente il "calcolo" della Tua classe, restituiscilo, non stamparlo all'interno del metodo. Esempio :

    >>> class Dissolvenze:
        global a
        a=[]
        
        def __init__(self,fase):
            self.fase = fase
    
        
        def calcolo(self,stato,inizio,fine):
            self.stato = stato
            self.inizio = inizio
            self.fine = fine
            print(self.fase , self.stato , self.inizio * self.fine)
            for i in range (0,self.fine):
                a.append(i)
            return a
    
    >>> alba = Dissolvenze('alba')
    >>> giorno = Dissolvenze('giorno')
    >>> tramonto = Dissolvenze('tramonto')
    >>> notte = Dissolvenze('notte')
    >>> print(alba.calcolo(1,10,20))
    alba 1 200
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
    >>> print(giorno.calcolo(2,50,60))
    giorno 2 3000
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59]
    >>> 


    Fatti non foste a viver come bruti...
  • Re: Qualcuno mi potrebbe aiutare?
    Forum >> Programmazione Python >> Scripting
    una possibilie soluzione :




    >>> ctrl = ['1', '2', '3', '4']
    >>> sel = ' '
    >>> msg = '''Inserisci figura che vuoi calcolare
    \t1 per il quadrato,
    \t2 per il rettangolo,
    \t3 per il triangolo
    \t4 per il cerchio
    scelta? : '''
    >>> while sel:
        sel = input(msg)
        if not sel in ctrl:
            print('Scelta non valida!\n\n')
            continue
        else:
            if sel == '1':
                lato = float(input('Inserisci lato: '))
                area = lato**2
            elif sel == '2':
                base = float(input('Inserisci base: '))
                altezza = float(input('Inserisci altezza: '))
                area = base * altezza
            elif sel == '3':
                base = float(input('Inserisci base: '))
                altezza = float(input('Inserisci altezza: '))
                area = base * altezza /2
            else:
                raggio = float(input('Inserisci raggio: '))
                area = raggio**2 * 3.1415
            print('Area = %.4f\n' % area)
    
            
    Inserisci figura che vuoi calcolare
        1 per il quadrato,
        2 per il rettangolo,
        3 per il triangolo
        4 per il cerchio
    scelta? : 4
    Inserisci raggio: 3
    Area = 28.2735
    
    Inserisci figura che vuoi calcolare
        1 per il quadrato,
        2 per il rettangolo,
        3 per il triangolo
        4 per il cerchio
    scelta? : 2
    Inserisci base: 3
    Inserisci altezza: 2
    Area = 6.0000
    
    Inserisci figura che vuoi calcolare
        1 per il quadrato,
        2 per il rettangolo,
        3 per il triangolo
        4 per il cerchio
    scelta? : 
    Scelta non valida!
    
    
    >>> 



    Se qualcosa non è chiaro, trova sulla docs, sarà utile esercizio.




    Ciao

    Fatti non foste a viver come bruti...
  • Re: come salvare e importare liste con il modulo json??
    Forum >> Principianti
    Avete qualche dritta da darmi per favore?
    beh ... la dritta migliore è leggere il tutoria, ciò che stai facendo con l'istruzione


    lungbraccio = {x}
    


    è definire, in modo improprio, un dizionario ... Ti mostro due modalità alternative di ciò che avresti potuto fare

    >>> x = [12.4, 15.6, 28.9, 45.5]
    >>> lungbraccio = x
    >>> import json
    >>> with open('valbraccio.json', 'w') as f:
        json.dump(lungbraccio, f)
    
        
    >>> lungbraccio = {'mylist': x}
    >>> with open('valbraccio.json', 'w') as f:
        json.dump(lungbraccio, f)
    
        
    >>> 



    e l'output su file che ne deriverebbe

    NzP:~$ cat valbraccio.json
    cat: valbraccio.json: File o directory non esistente
    NzP:~$ cat valbraccio.json
    [12.4, 15.6, 28.9, 45.5]NzP:~$ cat valbraccio.json
    {"mylist": [12.4, 15.6, 28.9, 45.5]}NzP:~$


    Ciao

    Fatti non foste a viver come bruti...
  • Re: IMMAGINI
    Forum >> Principianti
    I miei saluti.





    Oggi ho avuto modo di provare lo script su di un sistema windows e, con raccapriccio, mi son reso conto che la "trasparenza" di sfondo per una label non corrisponde ad una visibilità dell'immagine sottostante, come mi aspettavo, bensì ad un vero e proprio buco nella finestra e visibilità dello schermo sottostante alla stessa ... cosa per niente voluta nel mio secondo script di esempio.




    Mi scuso con eventuali lettori che siano stati tratti in inganno da questa mia erronea interpretazione :angry:




    Il rimedio è sufficientemente semplice : eliminare tutte le label, utilizzare un canvas per la rappresentazione dell'immagine di sfondo ed utilizzare lo stesso canvas per scrivere il testo delle didascalie occorrenti, allineandolo alle entry utilizzando il metodo grid_bbox() della finestra.




    Nel file che si allega è implementata tale metodologia.




    Mi scuso ancora, ciao.

    Fatti non foste a viver come bruti...
  • Re: IMMAGINI
    Forum >> Principianti
    Vorrei mettere un'immagine come sfondo della schermata, una sorta di filigrana magari, oppure in un angolo.
    Ciao
    Allora, ho atteso di avere un un po' di tempo per poter fare un esempio, l'ho fatto in due passi, nel primo (file example_01.py) è mirato all'inserimento di una immagine di background ad una finestra.
    Tale processo può essere fatto in vari modi, più o meno avanzati, ho scelto il più semplice : assegnare una immagine ad una label posizionata con il gestore di geometria "place" ed istruita ad occupare il 100% dello oggetto contenitore (un sub-classamento di Tkinter.Tk(), ovviamente il frame della finestra).
    Più degli accorgimenti, tipo ridimensionamento della finestra alla dimensione immagine, che diventa la dimensione minima della finestra, centratura sullo schermo, etc., piccole utilità che potrebbero servire, l'immagine viene scalata alle dimensioni finestra in caso di variazione.
    Il tutto è commentato.

    Nel secondo esempio ho simulato una finestra di login, con i controlli minimi necessari, due label, due entry e due pulsanti, separato per mostrarTi l'evoluzione del discorso e mettere l'accento sulla trasparenza dello sfondo delle label, impossibile in sistemi linux (unici che uso) ma possibile in ambienti windows che suppongo di Tuo utilizzo e che ho preimpostato, le istruzioni relative sono all'interno di example_02.py.
    In caso di utilizzo di sistemi Mac, le istruzioni sarebbero diverse, per linux bisognerebbe mettere da parte le label ed utilizzare i canvas.
    Qualora ti occorra "vedere" come inserire icone in bottoni e voci di menu, fai sapere, molto tempo fa ho messo in rete un esempio (neanche commentato), se ti serve lo trovo e te lo indico.
    il codice è nei files allegati al post

    Edit dimenticavo, modifica il pathname della immagine nell'istanza a MainWin

    --- Ultima modifica di nuzzopippo in data 2021-02-27 09:39:32 ---
    Fatti non foste a viver come bruti...
  • Re: Da menù a programma
    Forum >> Principianti
    Ciao a tutti, sono alle primissime armi con Python, proprio all'inizio.
    Pratico il Softair, e in club abbiamo l'onore di avere una persona speciale affetto da distrofia muscolare. Ci siamo inventati la figura dell'analista per coinvolgerlo nelle nostre simulazioni, e vorrei sviluppare un programma per renderlo veramente "operativo" al campo base....

    Detto questo mi servirebbe una grossa mano e tanta pazienza:

    ho creato un menù con dei bottoni; vorrei capire come si fa ad aprire un programma esterno a Python, tipo Access o Excel, cliccando sul bottone corrispondente.
    Ciao Carlo

    Suppongo che l'intenzione sia di aprire un file con l'applicazione predefinita nel sistema, giusto? Se è così circa un anno fa, in un altro forum, ho aperto questa discussione, i suggerimenti che mi sono stati dati erano efficaci, leggila, Ti sarà utile.

    Riguardo a "come" aprirla, suppongo che Ti stia utilizzando il framework tkinter, si utilizzano gli eventi con associate funzioni di callback, in gergo si definisce "binding", esistono parecchi esempi in rete.

    Purtroppo, la programmazione di interfacce grafiche è un argomento già avanzato, difficile per gli iniziandi, sono prevedibili difficoltà.




    Ho avuto un nipote affetto da distrofia muscolare e ricordo con dolore il non essere riuscito a trovare il modo di fargli comandare un computer tramite voce (era molti anni fa, la tecnologia molto più limitata) se hai problemi fatti sentire, non sono molto esperto ed ho anche poco tempo ma, se potrò, cercherò di darVi una mano.

    Ciao

    Fatti non foste a viver come bruti...