如何在Mac OS X上更改Tkinter按钮的前景色或背景色?

时间:2009-10-07 06:28:58

标签: python macos tkinter

我一直在编写Python编程中的Tkinter章节,遇到一个问题,即按钮的前景色和背景色不会改变。我正在使用Python 2.6.1开发Mac OS X 10.6系统。标签的颜色会改变,但不会改变按钮的颜色。例如:

from Tkinter import *

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

mainloop()

在我的Mac系统上,标签的颜色会发生变化,但按钮的颜色却没有变化。在使用Python 2.6.1的Windows系统上,标签和按钮的颜色都会发生变化。

任何人都知道出了什么问题?

我已经检查过Interface Builder,看来没有选项可以更改该工具中按钮的前景色或背景色。可以编辑标签的前景色和背景色。

Mac OS X渲染系统(Quartz?)可能不支持(轻松)更改按钮的fg和bg。

8 个答案:

答案 0 :(得分:20)

我认为答案是mac上的按钮根本不支持更改背景和前景色。如您所见,这并非Tk独有。

答案 1 :(得分:14)

有一种解决方案可以更改Mac上按钮的背景

使用:

highlightbackground=color

例如:

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

这导致以下内容,一个适合背景的漂亮按钮:

Button

答案 2 :(得分:13)

对于像我一样遇到这个问题的其他人,解决方案是使用ttk模块,该模块在OS X 10.7上默认可用。不幸的是,设置背景颜色仍然无法开箱即用,但文字颜色确实如此。

它需要对代码进行少量更改:

原件:

from Tkinter import *

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

mainloop()

使用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()

答案 3 :(得分:4)

很烦人的是,多年后这仍然是一个问题。

无论如何,正如其他人提到的那样,在Mac上,可以使用highlightbackground(边框颜色)代替背景。如果将边框的大小增加到很大(按钮的大小或更大),则将获得漂亮的纯色背景色。这将使您的按钮带有标签外观。

enter image description here

这在您使用场所的情况下有效,但在使用网格之类的方法时则无效。不幸的是,使用网格时,增加边框大小会自动增加按钮的大小。

但是,如果必须使用网格,则可以随时对其进行破解。...创建无色网格按钮。下次使用时,在其顶部放置背景颜色按钮。这将是上面带有“命令”的按钮或将事件绑定到的按钮。

如果您希望代码独立于操作系统,则可以添加'if OS ==“ Mac”'语句,甚至可以添加自定义函数来修改按钮(如果按钮在Mac上但在Windows或Windows上则单独保留) Linux。这是前者:

from tkinter import *
import platform


if platform.system() == "Darwin":   ### if its a Mac
    B = Button(text="Refersh All Windows", highlightbackground="Yellow", fg="Black", highlightthickness=30)
else:  ### if its Windows or Linux
    B = Button(text="Refresh All Windows", bg="Yellow", fg="Black")

B.place(x=5, y=10, width=140, height=30)

mainloop()

答案 4 :(得分:1)

我当时正在考虑为什么这不起作用。我发现尝试修复它的一种快捷方法是使用标签,然后用标签绑定点击。然后让标签在短时间内改变颜色以模仿点击。这是一个例子。

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 :(得分:1)

这对我有用:

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

答案 6 :(得分:0)

确认以下代码可以更改Mac OS X上tkinter按钮的背景。

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

但它不能改变ttk.Button的bg。

答案 7 :(得分:0)

您可以使用Pypi的tkmacosx进行操作
安装:
对于python2

pip install tkmacosx

对于python3

pip3 install tkmacosx


现在使用它:

from tkinter import *
from tkmacosx import Button

root = Tk()

B1 = Button(root, text='Mac OSX', bg='lightblue',fg='yellow', borderless=1)
B1.pack()

root.mainloop()

在mac os x上运行正常。

P.S 有关信息,请参阅 it on Pypi