2009-10-07 2 views
13

Ich habe die Tkinter-Kapitel in Programming Python durchgearbeitet und dabei ein Problem festgestellt, bei dem sich die Vorder- und Hintergrundfarben einer Schaltfläche nicht ändern. Ich arbeite an einem Mac OS X 10.6 System mit Python 2.6.1. Die Farben eines Etiketts ändern sich, aber nicht die Farben eines Knopfes. Zum Beispiel:Wie ändert man die Vorder- oder Hintergrundfarbe einer Tkinter-Taste auf Mac OS X?

Auf meinem Mac-System ändern sich die Farben des Etiketts, aber die Farben der Schaltfläche nicht. Auf einem Windows-System mit Python 2.6.1 ändern sich die Farben von Label und Button.

Wer weiß, was schief läuft?

Ich habe Interface Builder überprüft und es scheint, dass es keine Option gibt, die Vorder- oder Hintergrundfarbe einer Schaltfläche in diesem Tool zu ändern. Es besteht die Möglichkeit, die Vordergrund- und Hintergrundfarben eines Etiketts zu bearbeiten.

Das Mac OS X-Rendering-System (Quartz?) Unterstützt möglicherweise nicht (einfach) das Ändern von fg und bg einer Schaltfläche.

Antwort

17

Ich denke die Antwort ist, dass die Tasten auf dem Mac einfach nicht die Hintergrund- und Vordergrundfarben ändern. Wie Sie gesehen haben, ist dies nicht nur bei Tk der Fall.

+0

Ja, danke. Einfach für dich akzeptieren :). Bis eine bessere Antwort kommt. –

10

Für jeden anderen, der auf diese Frage wie ich passiert, ist die Lösung, das ttk Modul zu verwenden, das standardmäßig auf OS X 10.7 verfügbar ist. Leider funktioniert das Einstellen der Hintergrundfarbe immer noch nicht direkt, aber die Textfarbe funktioniert.

Es erfordert eine kleine Änderung an dem Code:

Original:

from Tkinter import * 

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

mainloop() 

Mit 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

Ich war auf der Suche, warum dies nicht so gut funktioniert. Ich fand einen schnellen Weg, um zu versuchen, es zu beheben, ist ein Etikett zu haben und dann einen Klick mit dem Etikett zu binden. Dann lassen Sie das Etikett für kurze Zeit Farben ändern, um das Klicken nachzuahmen. Hier ist ein Beispiel.

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

Es gibt eine Lösung für die Änderung der Hintergrund von Schaltflächen auf dem Mac.

Verwendung:

highlightbackground=color 

Zum Beispiel:

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

Daraus ergibt sich die folgende, eine schöne Taste, die mit dem Hintergrund passt:

Button

1

bestätigen folgende Code kann den Hintergrund von tkinter Button auf dem Mac ändern OS X.

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

Aber es kann nicht bg von ttk.Button ändern.

+0

Dies sollte die richtige Antwort sein – Chaikitty

1

Das ist für mich gearbeitet:

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; Tatsächlich funktioniert der 'kwarg: highlightbackground' mit tkinter OSX –