2012-11-27 18 views
7

Ho una semplice finestra di tkinter. Consiste di una piccola finestra, un timer e un pulsante per impostare il timer. Non voglio entrare nei dettagli con il codice.Cambia dinamicamente il colore di sfondo del widget in Tkinter

Voglio cambiare lo sfondo di tutti i widget nella mia finestra (pulsanti, etichetta, Ecc.).

Il mio primo pensiero è di utilizzare una variabile globale che imposterò su e associare tutti i widget all'opzione background con la variabile globale. Quindi, premendo il pulsante, cambierò la variabile globale in "green" (in modo che lo sfondo di tutti i widget cambi), ma non accade nulla.

La mia comprensione è stata la .mainloop() sorta di aggiornata la finestra. Come posso avere i widget per cambiare il colore di sfondo quando la mia variabile cambia senza riavviare la mia applicazione?

+4

potresti pubblicare almeno parte del tuo codice, renderebbe questo problema più facile da testare. – jbaldwin

risposta

7

dalla mia prima impressione credo che questo dovrebbe essere quello che stai cercando, come un semplice esempio

from Tkinter import * 

root = Tk() 
global colour 
global colourselection 
global count 
colour = "" 
colourselection= ['red', 'blue'] 
count = 1 

def start(parent): 
    Tk.after(parent, 1000, change) 

def change(): 
    global colour 
    global colourselection 
    global count 
    if (count < 2): 
     colour = colourselection[count] 
     button.configure(bg = colour) 
     count + 1 
    else: 
     colour = colourselection[count] 
     button.configure(bg = colour) 
     count = 1 
    start(root) 



button = Button(text = 'start', command = lambda: start(root)) 
button.pack() 

root.mainloop() 

Sono sicuro che si può lavorare tutti i problemi, non è stato testato

1

I colori di sfondo non cambieranno automaticamente. Tkinter ha la capacità di fare una cosa del genere con i caratteri ma non con i colori.

Dovrai scrivere del codice per iterare su tutti i widget e cambiare i loro colori di sfondo.