Profilo di Orso2001

Nome Orso2001
Indirizzo email n/a
Messaggi4
  • Re: non riesco a gestire... canvas.delete('all')
    Forum >> Programmazione Python >> GUI
    come previsto stavo sbagliando tutto...ecco la soluzione:
    from tkinter import *
    import math
    
    WID, HEI = 400, 400         # dimensioni finestra
    XC, YC = WID//2,  HEI//2    # centro finestra
    RADIUS = WID / 2 * 0.75     # raggio effetto grafico
    POINTS = 24                 # numero cerchi
    RP = 10                     # raggio dei punti
    deg =  270                  # angolo di partenza
    
    
    finestra = Tk()
    x = (finestra.winfo_screenwidth() /2)  -  (WID / 2)  # centra la finestra in x
    y = (finestra.winfo_screenheight() /2)  -  (HEI / 2) # centra la finestra in y
    finestra.geometry("%dx%d+%d+%d" % (WID, HEI, x, y))
    finestra.title('Finestra con cerchi')
    
    
    class App():
        
        def __init__(self,root,gradi):
            self.root = root
            self.tela=Canvas(self.root,width='%d'%(WID),height='%d'%(HEI),bg='yellow')
            self.tela.create_line(XC,YC,XC,(HEI-(YC*1.6)))
            self.tela.create_line((XC-20),(YC/1.6),XC,(HEI-(YC*1.6)))
            self.tela.create_line((XC+20),(YC/1.6),XC,(HEI-(YC*1.6)))
            self.tela.pack()
            self.gradi=gradi
            self.lista=[]
            for i in range(0,POINTS):
                
                rad = math.radians(self.gradi)
                x = XC + RADIUS * math.cos(rad)
                y = YC + RADIUS * math.sin(rad)
                self.w=self.tela.create_oval(x-RP, y-RP, x+RP, y+RP, fill='green')
                self.lista.append(self.w)
                self.gradi = self.gradi + (360/POINTS)
                
                      
        def draw(self):
            self.gradi+=2
            self.tela.after(50,self.draw)
            for self.w in self.lista:
                
                rad = math.radians(self.gradi)
                x = XC + RADIUS * math.cos(rad)
                y = YC + RADIUS * math.sin(rad)
                self.tela.coords(self.w,x-RP, y-RP, x+RP, y+RP)
                self.gradi = self.gradi + (360/POINTS)
            
              
        def start(self):
            self.draw()
            finestra.mainloop()
    
    app=App(finestra,deg)
    app.start()

  • [RISOLTO] non riesco a gestire... canvas.delete('all')
    Forum >> Programmazione Python >> GUI
    Buongiorno a Tutti,

    sto, passatemi il termine, giocando un po' con python e tkinter; attualmente vorrei realizzare un effetto in cui una serie di cerchi distribuiti in una circonferenza ruotino a "tempo"...in tal senso ho scritto il seguente codice:
    from tkinter import *
    import math
    
    
    WID, HEI = 400, 400         # dimensioni finestra
    XC, YC = WID//2,  HEI//2    # centro finestra
    RADIUS = WID / 2 * 0.75     # raggio effetto grafico
    POINTS = 24                 # numero cerchi
    RP = 10                     # raggio dei punti
    deg =  270                  # angolo di partenza
    
    
    finestra = Tk()
    x = (finestra.winfo_screenwidth() /2)  -  (WID / 2)  # centra la finestra in x
    y = (finestra.winfo_screenheight() /2)  -  (HEI / 2) # centra la finestra in y
    finestra.geometry("%dx%d+%d+%d" % (WID, HEI, x, y))
    finestra.title('Finestra con cerchi')
    
    
    class App():
        
        def __init__(self,root,gradi):
            self.root = root
            self.tela=Canvas(self.root,width='%d'%(WID),height='%d'%(HEI),bg='yellow')
            self.tela.create_line(XC,YC,XC,(HEI-(YC*1.6)))
            self.tela.create_line((XC-20),(YC/1.6),XC,(HEI-(YC*1.6)))
            self.tela.create_line((XC+20),(YC/1.6),XC,(HEI-(YC*1.6)))
            self.gradi=gradi
    
        def draw(self):
            rad = math.radians(self.gradi)
            x = XC + RADIUS * math.cos(rad)
            y = YC + RADIUS * math.sin(rad)
            self.tela.create_oval(x-RP, y-RP, x+RP, y+RP, fill='green')
            self.tela.pack()
            self.gradi = self.gradi + (360/POINTS)
           
            
        def loop(self):
            
            for i in range (0,POINTS):
                self.draw()
                t=i
            if t == (POINTS-1):
                self.tela.delete('all')
                self.gradi=self.gradi+1
                t=0
                self.tela.after(100,self.start)
                  
                
        def start(self):
            self.loop()
            finestra.mainloop()
    
    app=App(finestra,deg)
    app.start()
    
    
    Ad essere più precisi questo è uno dei tanti tentativi che ho creato per gestire il tutto.
    In pratica non riesco a gestire il "refresh" della canvas...sto provando con delete (self.tela.delete('all'))...ma compare la canvas vuota...se ometto quella riga i cerchi ruotano ma si sovrappongono creando un flusso continuo...ho provato ad inizializzare inserendo subito dopo il "self.__init__(self.root,self.gradi)"...ma niente.
    Cortesemente potete chiarirmi dove sbaglio ed il modo per eseguire il "refresh" (totale e parziale) della canvas?
    grazie


    --- Ultima modifica di Orso2001 in data 2017-01-17 23:35:08 ---
  • Re: Esercizio...
    Forum >> Programmazione Python >> Scripting
    Ciao Marco,

    gentile come sempre.
    ho eseguito:

    >>> f = open('myfile','w')
    >>> f.write('fooooo')
    6
    >>> import sys
    >>> sys.exit(0)

    Il file viene creato ma vuoto...

    se invece scrivo:

    >>> with open('myfile','w') as f:
    f.write('fooooo')


    6
    >>>
    il file viene creato e "scritto"

    Quindi in Windows il file non viene chiuso in automatico come in Linux-
    grazie

    Andrea

  • Esercizio...
    Forum >> Programmazione Python >> Scripting
    Buongiorno,



    mi sono avvicinato da poco a python e sto studiando su "Programmare con Python - Guida completa" scritto da Marco Buttu.

    Ho appena finito il primo capito e stavo svolgendo il primo esercizio conclusivo; penso di aver compreso il tutto ma sto avendo un "problema" di cui non trovo la causa. L'esercizio riguarda la "lettura" di file ".data" contenenti righe di numeri; per ogni riga trovare il min(), max(), e medio e stamparli in un file di uscita su nuova directory rinominandoli ".dataout"; l'esercizio prevede che si utilizzi uno "spazio" per dividere le singole cifre in lettura, quindi .split(), io ho modificato un po' il codice per poter gestire anche .split(';') tramite un try/except...cosa succede...se creo 4 files ".data" due dei quali con separatore "spazio" e due con separatore ";" l'ultimo file trattato viene si creato ma vuoto (gli altri vengono riempiti correttamente)...ho inserito dei "counter" per verificare se i cicli vengono terminati corretamente ed è così; ho inserito dei print() per verificare lo stato dell'analisi/elaborazione del file e tutto sembra corretto.

    Chiedo a chi ne sa di più un chiarimento di dove sto sbagliando...se può essere d'aiuto se cerco di cancellare il file ultimo creato ".dataout" non me lo lascia fare dicendomi che è aperto in python.

    Sto usando la 3.6.0b4 su Windows10.

    codice:

    import sys
    import os
    
    out_dir_name = sys.argv1 if sys.argv[1:] else 'out'  # Nome directory output
    try:
        os.mkdir(out_dir_name) # Crea la directory di output
        print('I file verranno scritti nella directory', out_dir_name)
    except FileExistsError:
        print("I file verranno scritti nella directory", out_dir_name, "esistente")
    
    for file_name in os.listdir():
        if file_name.endswith('.data'):
            out_file_name = os.path.join(out_dir_name, file_name + 'out')
            print('Sto per scrivere sul file `%s` ...' %out_file_name, end=' ')
            out = open(out_file_name, 'w')
            for line in open(file_name):
                try:
                    d_t = [float(item) for item in line.split()] # Dati della linea
                    out.write('%.2f   %.2f   %.2f\n' %(min(d_t), max(d_t), sum(d_t)/len(d_t)))
                except:
                    d_e = [float(item) for item in line.split(';')] # Dati della linea
                    out.write('%.2f   %.2f   %.2f\n' %(min(d_e), max(d_e), sum(d_e)/len(d_e)))
            print('Fatto!')
    grazie