如何更改按钮的颜色?

Posted

技术标签:

【中文标题】如何更改按钮的颜色?【英文标题】:How can I change a button's color back? 【发布时间】:2021-11-07 09:01:09 【问题描述】:

我正在使用 python tkinter 制作我的 gui,我希望用户能够使用键盘上的一个键来模拟按钮按下。有了这个,我需要通过改变它的颜色让它看起来像他们按下了按钮。到目前为止我有这个:

def clickedButton(event, number, button):
    global outputCalc

    outputCalc.config(text = number)
    button.configure(bg = "red")

numbers1Button = Button(root, text="1", padx=90, pady=90, bg='#FFFFFF', activebackground='#D9D9D9')
numbers1Button.bind('<Button-1>', lambda event: clickedButton(event, 1, numbers1Button))
root.bind('<Key-1>', lambda event: clickedButton(event, 1, numbers1Button))

当我让它休眠然后将背景颜色改回白色时,它什么也不做。我也尝试了一些其他的方法,但都没有成功。但是,当我使用此代码时,它成功地将按钮的颜色更改为红色。有什么办法可以使这项工作?另外,如果有更简单的方法,我想知道。谢谢!

【问题讨论】:

【参考方案1】:

请注意,tkinter mainloop 只能在收回控制权时更新小部件,即在 clickedButton() 返回之后。所以如果你在函数里面把按钮改成红色,休眠再改回白色,那么你在函数之后就只会看到白色的按钮了。

您可以使用.after() 而不是sleep() 在延迟一段时间后将按钮更改为白色:

def clickedButton(event, number, button):
    ...
    button.configure(bg="red")
    button.after(100, lambda: button.configure(bg="white"))

但是我建议将&lt;KeyRelease-1&gt; 绑定到相同的函数并根据绑定事件类型确定颜色:

def clickedButton(event, number, button):
    ...
    color = "red" if event.type == EventType.KeyPress else "white"
    button.configure(bg = color)

...
root.bind('<Key-1>', lambda event: clickedButton(event, 1, numbers1Button))
root.bind('<KeyRelease-1>', lambda event: clickedButton(event, 1, numbers1Button))

【讨论】:

谢谢它的工作,这不相关,但你似乎有经验,你知道为什么这不起作用吗? string = outputCalc.cget("text") outputCalc.config(text = string) @DPGGintec 您正在使用当前文本更新文本,因此您看不到任何更改。

以上是关于如何更改按钮的颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改组合框下拉按钮的颜色

如何使用 onclick 按钮更改悬停颜色

如何更改引导程序版本 4 按钮颜色

如何更改特定 TableViewCell 中的按钮颜色

单击时如何更改按钮的颜色,并在下次单击时恢复为默认颜色?

如何更改按钮的颜色?