¿Cómo cambiar el color de primer plano o de fondo de un botón Tkinter en Mac OS X?
He estado trabajando en los capítulos de Tkinter en Programación Python y encontré un problema en el que los colores de primer plano y fondo de un botón no cambian. Estoy trabajando en un sistema Mac OS X 10.6 con Python 2.6.1. Los colores de una etiqueta cambiarán, pero no los colores de un botón. Por ejemplo:
from Tkinter import *
Label(None, text='label', fg='green', bg='black').pack()
Button(None, text='button', fg='green', bg='black').pack()
mainloop()
En mi sistema Mac los colores de la etiqueta cambian, pero los colores del botón no. En un sistema Windows con Python 2.6.1, los colores tanto de la etiqueta como del botón cambian.
¿Alguien sabe qué está pasando?
Revisé Interface Builder y parece que no hay ninguna opción para cambiar el color de primer plano o de fondo de un botón en esa herramienta. Existe la posibilidad de editar los colores de primer plano y de fondo de una etiqueta.
Es posible que el sistema de renderizado de Mac OS X (¿Quartz?) simplemente no admita (fácilmente) el cambio de fg y bg de un botón.
Existe una solución para cambiar el fondo de los botones en Mac.
Usar:
highlightbackground=color
Por ejemplo:
submit = Button(root, text="Generate", highlightbackground='#3E4149')
Esto da como resultado lo siguiente, un bonito botón que encaja con el fondo:
Creo que la respuesta es que los botones de la Mac simplemente no permiten cambiar los colores de fondo y de primer plano. Como has visto, esto no es exclusivo de Tk.
Puedes hacerlo con la biblioteca tkmacosx de PyPI.
Instalación:
Para Python 2, utilice
pip install tkmacosx
.Para Python 3, utilice
pip3 install tkmacosx
.
Así es como se usa tkmacosx
:
from tkinter import *
from tkmacosx import Button
root = Tk()
B1 = Button(root, text='Mac OSX', bg='black',fg='green', borderless=1)
B1.pack()
root.mainloop()
Funciona bien en Mac OS X.