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

15 投票
2 回答
29489 浏览
提问于 2025-04-16 18:37

我举个简单的例子,关于OptionMenu这个控件,来自于http://effbot.org/tkinterbook/optionmenu.htm。如果我在代码里加一行来设置背景颜色(见下面的代码),那么只有按钮的背景颜色会改变,而下拉菜单的背景颜色还是灰色的。请问我能同时设置OptionMenu按钮和菜单的颜色吗?

我使用的是Windows 7,Python 2.6.6,Tkinter版本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 个回答

6

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

正如@Bryan所说,改变背景和前景颜色的命令是没问题的:

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

不过这个命令其实只会在点击下拉菜单时生效,大家可以看看这张图片:

下拉菜单在点击时的背景颜色

在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初学者理解! :)

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

撰写回答