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

Posted

技术标签:

【中文标题】如何在 Mac OS X 上更改 Tkinter 按钮的前景色或背景色?【英文标题】:How to change the foreground or background colour of a Tkinter Button on Mac OS X? 【发布时间】:2010-12-04 12:43: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。

【问题讨论】:

现在有一个更好的答案 - 使用tkmacosx。易于通过 pip 安装 - 要求看起来很简单......据我所知,这都是纯 python 并且可以在 pypi 上使用。感谢 Victor VosMotor 提到它:***.com/a/57127191/901641 【参考方案1】:

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

用途:

highlightbackground=color

例如:

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

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

【讨论】:

也适用于 10.15 catalina,谢谢。 @anthony-cramp 考虑更改接受的答案。 完美,这解决了我的问题!【参考方案2】:

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

【讨论】:

【参考方案3】:

对于像我一样遇到这个问题的其他人,解决方案是使用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()

【讨论】:

【参考方案4】:

您可以使用 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 上运行良好。

【讨论】:

P.P.S 我认为这是最简单的方法。 如果您发布这样的答案,您必须考虑到您已经晚了大约 9 年零 9 个月...所以包括版本信息和 tkmacos 的出生日期。 对堆栈溢出的其他用户很有用。 @ZF007 - *** 永远存在。它是参考资料,而不是社交网络。这就像***——内容有多旧并不重要。没有任何东西会根据年龄或不活动自动锁定。这是最佳答案,应标记为正确答案。 @AlexanderB.:它是跨平台的,见GitHub repo【参考方案5】:

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

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

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

但是,如果您必须使用网格,您可以随时破解它....创建您的无色网格按钮。接下来使用 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()

【讨论】:

这是让我的应用正常运行的唯一方法。【参考方案6】:

这对我有用:

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

【讨论】:

精彩;事实上,kwarg: highlightbackground 适用于 tkinter OSX 是的@BrianOakley,我就是这么说的。【参考方案7】:

我正在寻找为什么这也不起作用。我找到了一种尝试修复它的快速方法是有一个标签,然后将点击与标签绑定。然后让标签在短时间内改变颜色以模拟点击。这是一个例子。

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

【讨论】:

【参考方案8】:

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

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

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

【讨论】:

highlightbackgroundbackground 不同。 highlightbackground 只影响按钮边缘的小边框。按钮本身的背景不会改变。 使用 Mojave,此方法适用于操作系统处于暗模式时默认为白色文本的环境。

以上是关于如何在 Mac OS X 上更改 Tkinter 按钮的前景色或背景色?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mac OS 上使用 Tkinter 获取黑色文件对话框?

如何在 Mac OS X 上监视目录中的更改?

在 OS X 菜单栏中更改 Tkinter 应用程序的标题

使用 Tkinter 和 Python 在 Mac OS X 中进行惯性滚动

如何更改 Mac OS X 系统默认用户名?

Tkinter 窗口专注于 Mac OS X