[Python] Problema con Tkinter ma più in generale con le classi
Pietro Battiston
battiston a mail.dm.unipi.it
Ven 16 Nov 2007 09:20:56 CET
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
Maggiori informazioni sulla lista
Python