Cambiando el color del texto del widget ttk

He buscado por todas partes, pero aún tengo que encontrar un ejemplo sencillo que muestre cómo cambiar un elemento secundario de un estilo de widget ttk y aplicarlo de forma dinámica (después de la creación del widget).

Tengo algunos botones de verificación ttk que representan algunos elementos de configuración, y un botón ttk utilizado para actualizar un sistema remoto. Los botones de verificación se inicializan al estado del sistema remoto.

Si el usuario modifica cualquiera de los botones de verificación, deseo que tanto el texto del botón de verificación como el texto del botón de actualización se vuelvan rojos, para recordarle al usuario que el estado del botón de verificación ya no coincide con el estado remoto, y que se debe presionar el botón de actualización para enviar el Configuración modificada al sistema remoto.

Cuando se presiona el botón de actualización, el color del texto del botón de actualización y todos los botones de verificación se vuelven negros.

Sé que esto es posible (y probablemente sea fácil), pero ¿cómo?

Edición: Modificar el color de fondo también estaría bien.

Deberá crear un estilo personalizado y luego aplicar ese estilo al widget. Para crear un estilo personalizado, primero obtenga una instancia de ttk.Style , y luego use el método de configure para derivar un nuevo estilo de uno existente. El siguiente ejemplo crea un nuevo estilo llamado “Red.TCheckbutton”:

 style = ttk.Style() style.configure("Red.TCheckbutton", foreground="red") 

A continuación, simplemente asocie este estilo con el widget cuando desee que cambie el color:

 my_checkbutton.configure(style="Red.TCheckbutton") 

El mejor recurso para aprender a trabajar con los estilos ttk es tkdocs.com . Específicamente, http://www.tkdocs.com/tutorial/styles.html .

Aquí hay un ejemplo completo de trabajo:

 import ttk import Tkinter as tk class ExampleApp(tk.Frame): def __init__(self, *args, **kwargs): tk.Frame.__init__(self, *args, **kwargs) self.var1 = tk.StringVar() self.var2 = tk.StringVar() f1 = ttk.Frame(self) red_button = ttk.Button(f1, text="Red", command=self.make_red) default_button = ttk.Button(f1, text="Default", command=self.make_default) default_button.pack(side="left") red_button.pack(side="left") f2 = ttk.Frame(self) self.cb_one = ttk.Checkbutton(f2, text="Option 1", variable=self.var1, onvalue=1, offvalue=0) self.cb_two = ttk.Checkbutton(f2, text="Option 2", variable=self.var2, onvalue=1, offvalue=0) self.cb_one.pack(side="left") self.cb_two.pack(side="left") f1.pack(side="top", fill="x") f2.pack(side="top", fill="x") style = ttk.Style() style.configure("Red.TCheckbutton", foreground="red") def make_red(self): self.cb_one.configure(style="Red.TCheckbutton") self.cb_two.configure(style="Red.TCheckbutton") def make_default(self): self.cb_one.configure(style="TCheckbutton") self.cb_two.configure(style="TCheckbutton") if __name__ == "__main__": root = tk.Tk() ExampleApp(root).pack(fill="both", expand=True) root.mainloop()