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

Ant*_*amp 25 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()
Run Code Online (Sandbox Code Playgroud)

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

谁知道出了什么问题?

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

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

Bry*_*ley 23

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


Luk*_*err 22

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

使用:

highlightbackground=color
Run Code Online (Sandbox Code Playgroud)

例如:

submit = Button(root, text="Generate", highlightbackground='#3E4149')
Run Code Online (Sandbox Code Playgroud)

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

按键

  • 也适用于 10.15 catalina,谢谢。@anthony-cramp 考虑更改已接受的答案。 (2认同)

Vic*_*tor 16

您可以使用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()
Run Code Online (Sandbox Code Playgroud)

它在 Mac OS X 上运行良好。

在此处输入图片说明

  • 这对于堆栈溢出的其他用户很有用。 (8认同)
  • @ZF007 - StackOverflow 是永远的。它是参考资料,而不是社交网络。这就像维基百科 - 内容有多旧并不重要。没有任何东西会因为年龄或不活动而自动锁定。这是最佳答案,应标记为正确答案。 (7认同)
  • **PPS** 我认为这是做这件事最简单的方法。 (4认同)

Jas*_*ter 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()
Run Code Online (Sandbox Code Playgroud)

用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()
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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

在此处输入图片说明

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

然而,如果你必须使用网格,你总是可以破解它......创建你的无色网格按钮。接下来使用 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()
Run Code Online (Sandbox Code Playgroud)