Forum
>>
Programmazione Python
>>
GUI
>>
[RISOLTO] non riesco a gestire... canvas.delete('all')
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da Orso2001 |
2017-01-16 22:18:26 - [RISOLTO] non riesco a gestire... canvas.delete('all')
|
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 --- |
|
Scritto da Orso2001 |
2017-01-17 23:34:38 - Re: non riesco a gestire... canvas.delete('all')
|
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() |
Pagina: 1
Esegui il login per scrivere una risposta.