16.1.6.4 Associazione tra widget e variabili

Il valore corrente di alcuni widget (come la casella di introduzione di testo) pu� essere connesso direttamente a variabili dell'applicazione usando speciali opzioni. Queste opzioni sono variable, textvariable, onvalue, offvalue e value. Questo collegamento lavora in entrambe le direzioni: se la variabile, per qualunque motivo, cambia, allora il widget collegato verr� modificato per riflettere il nuovo valore.

Sfortunatamente nell'implementazione corrente di Tkinter non � possibile passare una variabile Python arbitraria ad un widget attraverso l'opzione variable o textvariable. L'unico tipo di variabili che possono svolgere questo lavoro sono variabili che derivano da una classe chiamata Variable, definita nel modulo Tkinter.

Ci sono molte sottoclassi di Variable gi� definite: StringVar, IntVar, DoubleVar e BooleanVar. Per leggere il valore attuale di una tale variabile, chiamare il suo metodo get() e, per cambiarlo, il metodo set(). Se si segue questo protocollo il widget si adeguer� sempre al valore della variabile senza ulteriori interventi.

Per esempio:

class App(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        
        self.entrythingy = Entry()
        self.entrythingy.pack()
        
        self.button.pack()
        # Qui c'� la variabile dell'applicazione
        self.contents = StringVar()
        # Le viene dato un qualche valore
        self.contents.set("this is a variable")
        # Si fa in maniera che il widget di immissione veda questa variabile
        self.entrythingy["textvariable"] = self.contents
        
        # e qui si mette la chiamata ad una funzione quando l'utente preme return.
        # faremo in modo che il programma stampi il valore della
        # variabile dell'applicazione quando l'utente preme return.
        self.entrythingy.bind('<Key-Return>',
                              self.print_contents)

    def print_contents(self, event):
        print "Ciao. Il contenuto della casella di immissione ora � ---->", \
              self.contents.get()

Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.