【问题标题】:Different color for different choices in tkinter option menutkinter 选项菜单中不同选择的不同颜色
【发布时间】:2023-04-07 15:57:01
【问题描述】:

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

我该怎么做?我已经看到其他帖子只是使整个选项菜单背景具有不同的颜色,但我只希望在选择特定选项时使用颜色。谢谢!

【问题讨论】:

  • “我看到其他帖子只是让整个选项菜单背景变成不同的颜色,但我只想要在选择特定选项时的颜色。”然后只需按下菜单中的项目调用一个也改变背景颜色的方法,并让其他两个项目改变颜色。

标签: python colors tkinter optionmenu


【解决方案1】:

如果您使用的是 Windows,那么您就不走运了,因为菜单是本机控件,不允许进行如此多的自定义。 osx 可能也是如此,但我不确定。

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

【讨论】:

    【解决方案2】:

    你可以在上面留下痕迹:

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

    【讨论】:

    • 这正是我所需要的!谢谢!
    • 如果我有几个具有相同值的选项菜单,有没有办法让它们都共享相同的回调函数?我注意到在 callbackFunc 中,您专门获得了一个变量。有没有办法让你可以在执行 trace_variable 时向回调发送参数?
    【解决方案3】:

    把这个归档在 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 2020-08-30
      • 2014-08-02
      • 2022-07-16
      • 1970-01-01
      相关资源
      最近更新 更多