2009-10-07 16 views
13

Pracowałem nad rozdziałami Tkintera w Pythonie programowania i napotkałem problem, w którym kolory pierwszego planu i tła przycisku nie ulegną zmianie. Pracuję nad systemem Mac OS X 10.6 z Python 2.6.1. Kolor etykiety zmieni się, ale nie kolory przycisku. Na przykład:Jak zmienić kolor pierwszego planu lub tła przycisku Tkinter w systemie 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() 

W moim systemie Mac kolory etykiety zmieniają się, ale kolory przycisku nie. W systemie Windows z Pythonem 2.6.1 zmieniają się kolory zarówno etykiety, jak i przycisku.

Ktoś wie, co się dzieje?

Sprawdziłem Interface Buildera i wygląda na to, że nie ma opcji zmiany koloru tła lub pierwszego planu przycisku w tym narzędziu. Istnieje możliwość edycji kolorów pierwszego planu i tła etykiety.

System renderowania Mac OS X (Quartz?) Może nie obsługiwać (łatwo) zmieniania fg i bg przycisku.

Odpowiedz

17

Myślę, że odpowiedź brzmi, że przyciski na komputerze Mac po prostu nie obsługują zmiany kolorów tła i pierwszego planu. Jak widzieliście, nie dotyczy to wyłącznie TK.

+0

Tak, dzięki. Łatwo Cię zaakceptować :). Dopóki nie przyjdzie lepsza odpowiedź. –

10

Dla każdego, kto zdarzy się na tym pytaniu, tak jak ja, rozwiązaniem jest użycie modułu ttk, który jest domyślnie dostępny w systemie OS X 10.7. Niestety ustawienie koloru tła nadal nie działa po wyjęciu z pudełka, ale kolor tekstu ma.

To wymaga niewielkiej zmiany w kodzie:

oryginalny:

from Tkinter import * 

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

mainloop() 

Z 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

szukałem, dlaczego to nie działa tak dobrze. Znalazłem szybki sposób, aby spróbować naprawić ten problem, aby mieć etykietę, a następnie powiązać kliknięcie z etykietą. Następnie zmień kolor etykiety na krótki czas, aby naśladować klikanie. Oto przykład.

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

Istnieje rozwiązanie na zmianę tło przycisków na Mac.

Zastosowanie:

highlightbackground=color 

Na przykład:

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

Wynika to w dalszej części, ładny przycisk, który wpisuje się w tle:

Button

1

Potwierdź następujący kod może zmienić tło przycisku Tkinter na Macu OS X.

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

Ale nie można zmienić bg z ttk.Button.

+0

To powinna być poprawna odpowiedź – Chaikitty

1

Ten pracował dla mnie:

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

Cudowna; W rzeczywistości 'kwarg: highlightbackground' działa z teksem OSX –

Powiązane problemy