【发布时间】:2017-05-14 05:14:58
【问题描述】:
在我的 GUI 应用程序中,我为给定列表中的每个项目创建一个按钮。当按下按钮时,所述按钮的背景变为绿色,并显示为“凹陷”。其他按钮显示为凸起并具有默认颜色。我的问题是只有最后一个创建的按钮会改变颜色和外观。我相信这是因为它包含回调函数。
我希望在第一次按下按钮后,当用户按下不同的按钮时,新按钮会变为绿色并出现凹陷,而前一个按钮会升起并变为默认颜色。我的猜测是我需要创建一个所有已创建按钮的列表,并在回调函数中对其应用逻辑以实现我想要的行为。但怎么会呢?
# ---callback functions---
def select_button():
btn.config(bg='green', activebackground='green', relief=SUNKEN)
# ---main---
# List of buttons to be created
list = ['A', 'B', 'C']
buttons = []
# Create buttons
for i, name in enumerate(list, 2):
btn = Button(root, text=name, command=select_button)
btn.grid(row=i, column=0, sticky=W)
buttons.append(btn)
【问题讨论】:
-
我知道按钮的默认背景颜色是浅灰色。
-
在
for-loo变量btn之后只保留最后一个按钮,因此使用btn.config你只更改最后一个按钮。 -
此元素与问题无关,但下次不要更改问题,因为其他阅读问题和评论,他们可能不明白发生了什么。最好在原始版本下方添加有问题的解释/修改。
-
我删除了旧的 cmets。
-
听起来您最好使用
Radiobutton并将indicatoron设置为 False,这几乎完全符合您的描述:一组按钮中只能选择一个,并且看起来是凹陷的,而其余的看起来是凸起的。您对使用Radiobutton小部件的解决方案感兴趣吗?