2009-10-07 19 views
13

He estado trabajando a través de los capítulos de Tkinter en Programming Python y encontré un problema donde los colores de primer plano y de 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:¿Cómo cambiar el color de primer plano o de fondo de un botón de Tkinter en Mac OS X?

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, cambian los colores de la etiqueta y el botón.

¿Alguien sabe qué está mal?

He comprobado el 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.

El sistema de renderización Mac OS X (¿Quartz?) Simplemente no admite (fácilmente) el cambio de fg y bg de un botón.

Respuesta

17

Creo que la respuesta es que los botones en el mac simplemente no admiten cambiar el fondo y los colores de primer plano. Como has visto, esto no es exclusivo de Tk.

+0

Sí, gracias. Fácil de aceptar para ti :). Hasta que llegue una mejor respuesta. –

10

Para cualquier otra persona que tenga esta pregunta como yo lo hice, la solución es usar el módulo ttk, que está disponible por defecto en OS X 10.7. Desafortunadamente, establecer el color de fondo aún no funciona de la caja, pero el color del texto sí lo hace.

Se requiere un pequeño cambio en el código:

original:

from Tkinter import * 

Label(None, text='label', fg='green', bg='black').pack() 
Button(None, text='button', fg='green', bg='black').pack() 

mainloop() 

Con TTK:

import tkinter as tk 
from tkinter import ttk 

root = tk.Tk() 

# background="..." doesn't work... 
ttk.Style().configure('green/black.TLabel', foreground='green', background='black') 
ttk.Style().configure('green/black.TButton', foreground='green', background='black') 

label = ttk.Label(root, text='I am a ttk.Label with text!', style='green/black.TLabel') 
label.pack() 

button = ttk.Button(root, text='Click Me!', style='green/black.TButton') 
button.pack() 

root.mainloop() 
0

que estaba buscando de por qué esto no funciona así. Encontré que una manera rápida de intentar arreglarlo es tener una etiqueta y luego unir un clic con la etiqueta. Luego haga que la etiqueta cambie de color por un corto tiempo para imitar el clic. Aquí hay un ejemplo.

def buttonPress(*args): 
    searchB.config(state = "active") 
    searchB.update() 
    time.sleep(0.2) 
    searchB.config(state = "normal") 
    ## Whatever command you want 

    searchB = Label(main, text = "Search", bg = "#fecc14", fg = "Black", activebackground = "Red", highlightbackground="Black") 
    searchB.bind("<Button-1>", startSearch) 
    searchB.pack() 
5

hay una solución para cambiar el fondo de botones en Mac.

Uso:

highlightbackground=color 

Por ejemplo:

submit = Button(root, text="Generate", highlightbackground='#3E4149') 

Esto se traduce en lo siguiente, un botón agradable que encaja con el fondo:

Button

1

Confirmar siguiente el código puede cambiar el fondo del botón tkinter en Mac OS X.

self.btn_open = tk.Button(self.toolbar, 
          text = "Open", 
          command=self.open, 
          highlightbackground = "gray") 

Pero no puede cambiar bg of ttk.Button.

+0

Esta debería ser la respuesta correcta – Chaikitty

1

Esto funcionó para mí:

self.gnuplot_bt = Button(
     self.run_but_container, text="Plot with Gnuplot", font="Helvetica", command=self.gnuplot, 
     highlightbackground ="#8EF0F7", pady=2, relief=FLAT 
    ) 
+0

Maravilloso; De hecho, el 'kwarg: highlightbackground' funciona con tkinter OSX –

Cuestiones relacionadas