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

root1=Tkinter.Tk()
root2=finestra()

#A questo punto mi aspetto che root1 e root2 siano oggetti assolutamente identici, tranne che root2 ha in più il parametro "stringa"
#Invece...

root1.update()      #Questa riga funziona perfettamente
root2.update() #Questa invece mi dà l'errore: <type 'exceptions.AttributeError'>: finestra instance has no attribute 'tk'

###################################################

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?

Ho visto online un po' di casi di programmini Tkinter in cui si evita il problema creando da zero le proprie classi invece di farle derivare da una classe Tkinter, e inserendo gli oggetti Tkinter desiderati come attributi. Magari è anche il metodo più ortodosso... ma mi complicherebbe non poco il codice (e poi ad esempio nelle Gtk è perfettamente normale fare una classe derivata da un widget Gtk...)

Vi ringrazio per qualsiasi delucidazione, o anche solo qualche link a pagine illuminanti.

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

Rispondere a