2017-08-09 147 views
-1

我目前正试图让我的程序更改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,但仍然出现相同的错误。我的代码有什么问题?

+2

您正在使用来自ttk的按钮,而不是tkinter。就像错误说的那样,ttk按钮没有'background'选项。 –

+0

@BryanOakley啊....所以我想我的选择将是使用tk按钮,而不是ttk。有没有一种方法可以在为每个按钮创建样式之外更改ttk Button的背景? – Skitzafreak

+0

我不认为有。这就是ttk的要点,可以使用主题而不是单独的配置选项。 –

回答

1

正如布莱恩奥克利说,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建议,只需切换到传统知识有后台选项的按钮。