动态更新Tkinter按钮颜色

时间:2017-08-09 15:45:07

标签: python tkinter

我目前正在尝试让我的程序更改Tkinter按钮的颜色。

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

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 个答案:

答案 0 :(得分:1)

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

或者,正如OP建议的那样,只需切换到具有背景选项的tk按钮。