我一直在编写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。
答案 0 :(得分:20)
我认为答案是mac上的按钮根本不支持更改背景和前景色。如您所见,这并非Tk独有。
答案 1 :(得分:14)
有一种解决方案可以更改Mac上按钮的背景。
使用:
highlightbackground=color
例如:
submit = Button(root, text="Generate", highlightbackground='#3E4149')
这导致以下内容,一个适合背景的漂亮按钮:
答案 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(边框颜色)代替背景。如果将边框的大小增加到很大(按钮的大小或更大),则将获得漂亮的纯色背景色。这将使您的按钮带有标签外观。
这在您使用场所的情况下有效,但在使用网格之类的方法时则无效。不幸的是,使用网格时,增加边框大小会自动增加按钮的大小。
但是,如果必须使用网格,则可以随时对其进行破解。...创建无色网格按钮。下次使用时,在其顶部放置背景颜色按钮。这将是上面带有“命令”的按钮或将事件绑定到的按钮。
如果您希望代码独立于操作系统,则可以添加'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