Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python tkinter选项菜单中不同选项的不同颜色_Python_Colors_Tkinter_Optionmenu - Fatal编程技术网

Python tkinter选项菜单中不同选项的不同颜色

Python tkinter选项菜单中不同选项的不同颜色,python,colors,tkinter,optionmenu,Python,Colors,Tkinter,Optionmenu,我正在使用Python和Tkinter。我有一个选项菜单,有三个选项,其中一个是“开”。当我选择“on”时,我想将其设置为绿色。我不是指字体。当我选择“开”时,我希望选项菜单的背景是绿色,而其他选项只是默认的灰色 我该怎么做?我看到过其他一些帖子,它们只是让整个选项菜单的背景颜色不同,但我只想在选择某个特定选项时使用不同的颜色。谢谢大家! 如果您使用的是windows,那就太倒霉了,因为菜单是本机控件,不允许进行如此多的自定义。osx可能也是如此,但我记不清了 对于其他平台,您可以使用与选项菜单

我正在使用Python和Tkinter。我有一个选项菜单,有三个选项,其中一个是“开”。当我选择“on”时,我想将其设置为绿色。我不是指字体。当我选择“开”时,我希望选项菜单的背景是绿色,而其他选项只是默认的灰色


我该怎么做?我看到过其他一些帖子,它们只是让整个选项菜单的背景颜色不同,但我只想在选择某个特定选项时使用不同的颜色。谢谢大家!

如果您使用的是windows,那就太倒霉了,因为菜单是本机控件,不允许进行如此多的自定义。osx可能也是如此,但我记不清了


对于其他平台,您可以使用与选项菜单关联的菜单方法,该方法允许您设置菜单中每个条目的背景色。

您可以在其上放置跟踪:

from Tkinter import *

OPTIONS = (
    "egg",
    "go",
    "spam"
)

root = Tk()

var = StringVar()
var.set(OPTIONS[0]) # default

def callbackFunc(name, index, mode):
    value = var.get()
    if value == 'go':
        om.config(bg='green',fg='black',
                 activebackground='green',
                 activeforeground='black')
    else:
        om.config(bg='SystemButtonFace',fg='SystemButtonText',
                 activebackground='SystemButtonFace',
                 activeforeground='SystemButtonText')

om = OptionMenu(root, var, *OPTIONS)
om.pack()

Callbackname = var.trace_variable('w', callbackFunc)

root.mainloop()

将此文件归档在U下,例如:

from Tkinter import *

OPTIONS = (
    "egg",
    "go",
    "spam"
)

controlsMap = {}

root = Tk()

def callbackFunc(name, index, mode):
    value = root.getvar(name) #getvar: return the value of Tcl variable NAME
    widget = controlsMap[name]
    if value == 'go':
        widget.config(bg='green',fg='black',
                 activebackground='green',
                 activeforeground='black')
    else:
        widget.config(bg='SystemButtonFace',fg='SystemButtonText',
                 activebackground='SystemButtonFace',
                 activeforeground='SystemButtonText')


var1 = StringVar(root, name='var1') #give it a master and a name
var1.set(OPTIONS[0])
om1 = OptionMenu(root, var1, *OPTIONS)
om1.config(width=5)
om1.grid(row=0, column=0)
controlsMap['var1'] = om1
var1.trace_variable('w', callbackFunc)

var2 = StringVar(root, name='var2') #
var2.set(OPTIONS[0])
om2 = OptionMenu(root, var2, *OPTIONS)
om2.config(width=5)
om2.grid(row=0, column=1)
controlsMap['var2'] = om2
var2.trace_variable('w', callbackFunc)

var3 = StringVar(root, name='var3') #
var3.set(OPTIONS[0])
om3 = OptionMenu(root, var3, *OPTIONS)
om3.config(width=5)
om3.grid(row=0, column=2)
controlsMap['var3'] = om3
var3.trace_variable('w', callbackFunc)


root.mainloop()

“我见过其他帖子,只是让整个选项菜单的背景颜色不同,但我只想在选择某个特定选项时使用颜色。”然后只要按下菜单中的项目,就可以调用一个方法,该方法也可以更改背景颜色,并让其他两个项目更改回颜色。这正是我所需要的!谢谢如果我有几个具有相同值的选项菜单,有没有办法让它们共享相同的回调函数?我注意到在callbackFunc中,您特别得到了一个变量。是否有一种方法可以使您在执行trace_变量时向回调发送参数?