Re: [Python] Problema con Tkinter ma più in generale con le classi

Y3s y3s a katamail.com
Ven 16 Nov 2007 11:07:45 CET


Il giorno 16/nov/07, alle ore 09:20, Pietro Battiston ha scritto:

> Salve a tutti.  Dal basso della mia scarsa esperienza con gli  
> oggetti, ho un problema forse banale ma che si scontra da un paio  
> di giorni con tutto quello che ho sempre pensato sulle classi.
>
> Il problema è riprodotto nel seguente codice:
>
> ###################################################
> import Tkinter
>
> class finestra(Tkinter.Toplevel):
>    def __init__(self):
>       self=Tkinter.Tk()            #Il mio oggetto instanziato lo  
> voglio identico ad una finestra toplevel "classica"...
>       self.stringa="testo"       #... tranne che ci voglio  
> aggiungere i metodi e gli attributi che mi servono

Forse non ti è chiaro il modo in cui funzionano gli assegnamenti in  
python. In quel modo assegni al nome "self" locale alla funzione un  
oggetto. Ma non stai modificando l'oggetto stesso! Per fare quello  
che vuoi, devi utilizzare il __new__ in un modo simile a questo (non  
testato):

class Finestra(Tkinter.Toplevel):
     def __new__(cls):
         oggetto = Tkinter.Tk()
         oggetto.stringa = "testo"
         return oggetto

Questo supponendo che Tkinter.Tk() restituisca un valore di tipo  
Tkinter.Toplevel (non conosco tkinter)<

> Ho provato a ragionarci un po'... ma se la classe Toplevel  
> (ovviamente ho verificato nella docstring che Tkinter.Tk "Return a  
> new Toplevel widget...") non ha di per sé il metodo "update", come  
> può essergli aggiunto dalla funzione Tk?! Un metodo non può essere  
> aggiunto ad un'istanza solo aggiungendolo alla sua classe?! E se  
> anche non fosse così, e in realtà Tkinter.Tk() avesse qualche modo  
> magico di aggiungere metodi, perché questi metodi non si vedono  
> dall'"esterno" della classe finestra?
>

No, un metodo può essere aggiunto anche a una singola istanza.
>

> Pietro
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python

--
Antonio Valente




Maggiori informazioni sulla lista Python