Prima di riprendere la riflessione sull'uso astrologico della programmazione in Python, vi presento un'altra piccola applicazione che mostra come si puo' creare un widget e distruggerlo in funzione degli eventi del mouse (ma potrebbero essere anche altri tipi di eventi).
Gli eventi sono generati di continuo, il sistema li produce da sè o li acquisisce dall'utente. Alcuni possono essere intercettati, come il movimento del mouse su un widget (mouseover) o la sua uscita dal widget. In ambedue i casi, come si vede nel programma allegato, tali eventi possono essere intercettati per la chiamata di funzioni di callback.
Il metodo tag_bind si applica alla canvas. Vengono passati come parametri il tipo di evento (Motion o Leave tra segni di minore e maggiore) e la funzione di callback che si desidera attivare. Nelle funzioni, quando il widget viene creato riceve un tag che lo contraddistingue (potrebbe essere applicato a più oggetti, volendo), quando il widget viene distrutto viene identificato con il proprio tag.
Nella finestra di cui avete una riproduzione qui a fianco, il widget è una stringa di testo, che compare, con diverso contenuto, quando si entra col mouse nell'area del widget scelto (cerchio o quadrato). Non appena si allontana il mouse, la stringa di testo, generata in occasione del primo evento, viene cancellata. La sintassi per la cancellazione del widget è, nel caso specifico:self.canvas.delete(tag)che di fatto rimuove il widget 'child' dell'applicazione 'parent' che è la canvas.
La manipolazione intenzionale dei widget è una delle tecniche di composizione grafica di cui avremo bisogno in futuro, quando inizieremo a scrivere l'applicazione per lo sviluppo e la composizione grafica dei temi astrologici.
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 | import Tkinter class MyApp: def __init__(self): self.root=Tkinter.Tk() self.root.title('Creare e cancellare i widget') self.frame=Tkinter.Frame() self.frame.pack() self.canvas = Tkinter.Canvas(self.frame, width=300, height = 300) self.canvas.pack() self.canvas.create_oval(25,25,75,75, fill="green", tag = 'cerchio') self.canvas.create_rectangle(100,100,150,150, fill='red', tag = 'quadrato') self.canvas.tag_bind('cerchio', '<Motion>',self.motion_in) self.canvas.tag_bind('cerchio','<Leave>', self.motion_out) self.canvas.tag_bind('quadrato','<Motion>',self.message) self.canvas.tag_bind('quadrato','<Leave>', self.message_destroy) def motion_in(self, event): self.canvas.create_text(200,200, text="Sei entrato nel cerchio", tag='mouse_str') def motion_out(self, event): self.canvas.delete('mouse_str') def message(self, event): self.canvas.create_text(200, 200, text="Sei entrato nel quadrato", tag='entrato') def message_destroy(self, event): self.canvas.delete('entrato') def mainloop(self): self.root.mainloop() master = MyApp() master.mainloop() |
No comments:
Post a Comment