48

我一直在研究 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。

4

8 回答 8

59

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

采用:

highlightbackground=color

例如:

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

这会产生以下效果,这是一个适合背景的漂亮按钮:

按钮

于 2017-03-04T01:38:41.483 回答
31

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

于 2009-10-07T10:58:11.183 回答
20

对于像我一样遇到这个问题的其他人,解决方案是使用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()
于 2012-03-03T04:04:44.137 回答
19

您可以使用PyPI 中的tkmacosx库来完成。

安装:

  • 对于 Python 2,使用pip install tkmacosx.

  • 对于 Python 3,使用pip3 install tkmacosx.


这是你如何使用tkmacosx

from tkinter import *
from tkmacosx import Button

root = Tk()

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

root.mainloop()

它在 Mac OS X 上运行良好。

在此处输入图像描述

于 2019-07-20T17:44:16.383 回答
5

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

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

在此处输入图像描述

如果您使用的是地点,则此方法有效,但如果您使用的是网格之类的东西,则无效。不幸的是,使用网格,增加边框大小会自动增加按钮大小。

但是,如果您必须使用网格,您可以随时破解它....创建您的无色网格按钮。接下来使用 place 在其顶部添加一个背景颜色按钮。这将是带有“命令”的按钮或您将事件绑定到的按钮。

如果您希望您的代码独立于操作系统,您可以添加一个'if OS == "Mac"' 语句,甚至添加一个自定义函数,如果它在 Mac 上,则修改按钮,但在 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()
于 2018-09-24T19:37:26.207 回答
2

这对我有用:

    self.gnuplot_bt = Button(
        self.run_but_container, text="Plot with Gnuplot", font="Helvetica", command=self.gnuplot,
        highlightbackground ="#8EF0F7", pady=2, relief=FLAT
    )
于 2017-11-22T19:15:14.233 回答
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()
于 2016-01-13T09:16:49.720 回答
0

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

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

但它不能改变 ttk.Button 的背景。

于 2017-05-22T15:47:54.453 回答