如何更改Tkinter的OptionMenu小部件的菜单背景颜色?

15
如果我以从http://effbot.org/tkinterbook/optionmenu.htm获取的OptionMenu为例,并添加一行设置背景颜色的代码(如下所示),只有按钮背景更改了颜色,而下拉菜单仍然是灰色的。我能否为OptionMenu的按钮和下拉菜单都设置颜色?
我正在使用Windows 7,Python 2.6.6,Tkinter Rev 73770。
from Tkinter import *  
master = Tk()  
variable = StringVar(master)  
variable.set("one") # default value  
w = OptionMenu(master, variable, "one", "two", "three")  
w.config(bg = "GREEN")  # Set background color to green  
w.pack()  
mainloop()  
谢谢。
2个回答

24
你需要从OptionMenu中获取menu对象并设置其背景色,这样应该就可以达到你想要的效果。
w = OptionMenu(master, variable, "one", "two", "three")  
w.config(bg = "GREEN")  # Set background color to green

# Set this to what you want, I'm assuming "green"...
w["menu"].config(bg="GREEN")

w.pack()  

在 M1 上使用 3.10.0b1,您不必通过 ["menu"] 包含对象,但仍需要在初始化后进行配置。 - Jake

5

虽然我回答有点晚,但我想补充一下说明!

正如@Bryan所说,更改背景和前景颜色的命令是正确的:

 w["menu"].config(bg="GREEN")

但是这个命令只会影响到下拉菜单被点击时的背景颜色,如图所示:

Drop-down menu background color only when clicked

在 Tkinter 中,如果想要在不点击窗口的情况下设置属性,需要使用以下命令:
w.config(bg="GREEN")

未选中的下拉菜单背景颜色

因此,将这两行代码组合起来,才能得到完全绿色的下拉菜单!

w.config(bg="GREEN")
w["menu"].config(bg="GREEN")

但是还有一个问题,如果您将光标放在打开菜单的按钮上,则它会恢复其默认的白色...

当鼠标悬停在下拉菜单按钮上时,背景颜色变蓝

以及丑陋的蓝色:

当鼠标悬停在下拉菜单按钮上时,背景颜色变蓝

幸运的是,.config()函数有一个参数可以解决这个问题:

w.config(bg="GREEN", fg="BLACK", activebackground="GREEN", activeforeground="BLACK")
w["menu"].config(bg="GREEN", fg="BLACK", activebackground="GREEN", activeforeground="BLACK")

以下是让下拉菜单背景呈现绿色,而菜单条目呈现黑色的方法。但您可以根据需要修改.config()函数的参数(如宽度、高度、字体、字号等)。

希望我对像我一样初学Tkinter的人足够易懂! :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接