如何在 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。
【讨论】:
highlightbackground
与 background
不同。 highlightbackground
只影响按钮边缘的小边框。按钮本身的背景不会改变。
使用 Mojave,此方法适用于操作系统处于暗模式时默认为白色文本的环境。以上是关于如何在 Mac OS X 上更改 Tkinter 按钮的前景色或背景色?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Mac OS 上使用 Tkinter 获取黑色文件对话框?