Orso2001
Profilo di
Nome | Orso2001 |
---|---|
Indirizzo email | n/a |
Messaggi | 4 |
-
- 2017-01-17 23:34:38
- 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()
-
- 2017-01-16 22:18:26
- [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 ---
-
- 2016-12-08 22:14:37
- 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
-
- 2016-12-07 13:07:24
- 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