简体   繁体   English

如何在 Tkinter 中使用一项功能配置多个按钮?

[英]How can I configure multiple buttons with one function in Tkinter?

def changeColour():
    LT.configure(bg = "white")
    LM.configure(bg = "white")
    LB.configure(bg = "white")

LT = Button(root, width=16, height=8, bg = "blue", command = changeColour)
LT.place(x=10, y=10)

LM = Button(root, width=16, height=8, bg = "red", command = changeColour)
LM.place(x=10, y=150)

LB = Button(root, width=16, height=8, bg = "green", command = changeColour)
LB.place(x=10, y=290)

How do I write the function changeColour() so it changes the colour of the button without a line configuring each button to change colour explicitly?我如何编写函数changeColour()以便它更改按钮的颜色而不用一行配置每个按钮来显式更改颜色?

I'm assuming by "so it changes the colour of the button", you want only the button that was actually clicked to change color.我假设“所以它改变按钮的颜色”,你想只有实际点击来改变颜色的按钮。

I know of two approaches.我知道两种方法。

  1. Use lambdas to supply the name of the clicked widget to the function.使用 lambdas 向函数提供单击的小部件的名称。

def changeColour(widget):
    widget.config(bg="white")

#...

LM = Button(root, width=16, height=8, bg = "red", command = lambda: changeColour(LM))
LM.place(x=10, y=150)
  1. Use bind instead of command , as the former can deduce what widget raised the event.使用bind而不是command ,因为前者可以推断出是哪个小部件引发了事件。

def changeColour(event):
    event.widget.config(bg="white")

#...

LT = Button(root, width=16, height=8, bg = "blue")
LT.bind("<1>", changeColour)
LT.place(x=10, y=10)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM