[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