【问题标题】:How to change menu background color of Tkinter's OptionMenu widget?如何更改 Tkinter 的 OptionMenu 小部件的菜单背景颜色?
【发布时间】:2011-05-30 15:29:34
【问题描述】:

如果我以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()  

谢谢

【问题讨论】:

    标签: python tkinter optionmenu


    【解决方案1】:

    您需要从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()  
    

    【讨论】:

    • 谢谢。这正是我想要的。
    • 在使用 3.10.0b1 的 M1 上,您不必通过 ["menu"] 包含对象,但仍需要在初始化后进行配置。
    【解决方案2】:

    我添加的答案有点晚,但我想澄清一下!

    正如@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 初学者有足够的理解! :)

    【讨论】: