¿Cómo cambiar el color de primer plano o de fondo de un botón Tkinter en Mac OS X?

Resuelto Anthony Cramp asked hace 14 años • 12 respuestas

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.

Anthony Cramp avatar Oct 07 '09 13:10 Anthony Cramp
Aceptado

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:

Botón

Luka Kerr avatar Mar 04 '2017 01:03 Luka Kerr

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.

Bryan Oakley avatar Oct 07 '2009 10:10 Bryan Oakley

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.

ingrese la descripción de la imagen aquí

USERNAME GOES HERE avatar Jul 20 '2019 17:07 USERNAME GOES HERE