2009-10-07 8 views
13

J'ai travaillé sur les chapitres Tkinter dans Programming Python et j'ai rencontré un problème où les couleurs de premier plan et d'arrière-plan d'un bouton ne changeront pas. Je travaille sur un système Mac OS X 10.6 avec Python 2.6.1. Les couleurs d'une étiquette vont changer, mais pas les couleurs d'un bouton. Par exemple:Comment changer la couleur de premier plan ou d'arrière-plan d'un bouton Tkinter sur 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() 

Sur mon système Mac, les couleurs de l'étiquette changent, mais pas les couleurs du bouton. Sur un système Windows avec Python 2.6.1, les couleurs de l'étiquette et du bouton changent.

Quelqu'un sait ce qui ne va pas?

J'ai coché Interface Builder et il semble qu'il n'y ait aucune option pour changer la couleur de premier plan ou d'arrière-plan d'un bouton dans cet outil. Il est possible de modifier les couleurs de premier plan et d'arrière-plan d'une étiquette.

Le système de rendu Mac OS X (Quartz?) Peut ne pas prendre en charge (facilement) le changement de fg et de bg d'un bouton.

Répondre

17

Je pense que la réponse est que les boutons sur le mac ne supportent tout simplement pas la modification des couleurs d'arrière-plan et de premier plan. Comme vous l'avez vu, ce n'est pas unique à Tk.

+0

Eh oui, merci. Facile à accepter pour vous :). Jusqu'à ce qu'une meilleure réponse arrive. –

10

Pour quiconque se pose cette question comme je l'ai fait, la solution est d'utiliser le module ttk, qui est disponible par défaut sur OS X 10.7. Malheureusement, la définition de la couleur d'arrière-plan ne fonctionne toujours pas, mais la couleur du texte le fait.

Il faut un petit changement au code:

Original:

from Tkinter import * 

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

mainloop() 

Avec 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

Je cherchais pourquoi cela ne fonctionne pas aussi bien. J'ai trouvé un moyen rapide d'essayer de résoudre le problème, c'est d'avoir une étiquette, puis de lier un clic avec l'étiquette. Ensuite, l'étiquette change de couleur pendant une courte période pour imiter le clic. Voici un exemple.

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

Il existe une solution pour changer l'arrière-plan des boutons sur Mac.

Utilisation:

highlightbackground=color 

Par exemple:

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

Il en résulte ce qui suit, un joli bouton qui correspond avec l'arrière-plan:

Button

1

Confirmer la suite code peut changer l'arrière-plan du bouton tkinter sur Mac OS X.

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

Mais il ne peut pas changer bg de ttk.Button.

+0

Cela devrait être la bonne réponse – Chaikitty

1

Cela a fonctionné pour moi:

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

Wonderful; En fait, le 'kwarg: highlightbackground' fonctionne avec tkinter OSX –