代码之家  ›  专栏  ›  技术社区  ›  Skitzafreak

动态更新Tkinter按钮颜色

  •  -1
  • Skitzafreak  · 技术社区  · 7 年前

    我将按钮存储在一个列表中,当调用按钮的更新方法时,假设重置所有按钮,然后将传递的按钮的值设置为绿色。以下是一些代码,可以作为我尝试执行的示例:

    import tkinter as tk
    from tkinter import ttk
    
    def updateButton(value):
        for btn in btnList:
            btnList[btn].configure(bg = "white")
        btnList[value].configure(bg = "green")
    
    root = tk.Tk()
    
    btn1 = ttk.Button(root, text = "BTN 1", command = lambda: updateButton("BTN 1"))
    btn1.pack()
    btn2 = ttk.Button(root, text = "BTN 2", command = lambda: updateButton("BTN 2"))
    btn2.pack()
    
    btnList = { "BTN 1" : btn1, "BTN 2" : btn2 }
    
    root.mainloop()
    

    我遇到的问题是,当我尝试运行 updateButton 方法,我得到以下错误:

    _tkinter.TclError: unknown option "-bg"
    

    我试过改变 bg background 仍然会得到相同的错误。我的代码有什么问题?

    1 回复  |  直到 7 年前
        1
  •  1
  •   j_4321    7 年前

    正如Bryan Oakley所说,ttk按钮没有背景选项,更改其背景的唯一方法是使用样式:

    import tkinter as tk
    from tkinter import ttk
    
    def updateButton(value):
        for btn in btnList:
            btnList[btn].configure(style='white.TButton')
        btnList[value].configure(style='green.TButton')
    
    root = tk.Tk()
    
    style = ttk.Style(root)
    style.configure('white.TButton', background='white')
    style.configure('green.TButton', background='green')
    
    btn1 = ttk.Button(root, text="BTN 1", command=lambda: updateButton("BTN 1"), 
                      style='white.TButton')
    btn1.pack()
    btn2 = ttk.Button(root, text="BTN 2", command=lambda: updateButton("BTN 2"), 
                      style='white.TButton')
    btn2.pack()
    
    btnList = { "BTN 1" : btn1, "BTN 2" : btn2 }
    
    root.mainloop()